gpt4 book ai didi

ios - 有没有办法在 Swift 中将 UIPickerView 添加到 UIAlertController(Alert 或 ActionSheet)中?

转载 作者:IT王子 更新时间:2023-10-29 05:08:10 26 4
gpt4 key购买 nike

我对 swift(和 iOS 编程完全陌生)完全陌生,但我开始弄乱它(当一切仍是测试版时,这不是一个好主意 :D)。所以我试图自己弄清楚,但仍然没有。甚至尝试添加包含选择器的 subview 都没有成功。那么有人可以帮助我吗?

最佳答案

好吧,这是我的最终代码,对我有用。它是一些想法的混合体。我会接受我的答案的主要原因是我的代码是在 Swift 中,我的代码使用 UIAlertController,我的代码是用于选择器的。我要感谢 Jageen - 我的回答是基于他的想法。

    func showPickerInActionSheet(sentBy: String) {
var title = ""
var message = "\n\n\n\n\n\n\n\n\n\n";
var alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.ActionSheet);
alert.modalInPopover = true;


//Create a frame (placeholder/wrapper) for the picker and then create the picker
var pickerFrame: CGRect = CGRectMake(17, 52, 270, 100); // CGRectMake(left), top, width, height) - left and top are like margins
var picker: UIPickerView = UIPickerView(frame: pickerFrame);

/* If there will be 2 or 3 pickers on this view, I am going to use the tag as a way
to identify them in the delegate and datasource. /* This part with the tags is not required.
I am doing it this way, because I have a variable, witch knows where the Alert has been invoked from.*/
if(sentBy == "profile"){
picker.tag = 1;
} else if (sentBy == "user"){
picker.tag = 2;
} else {
picker.tag = 0;
}

//set the pickers datasource and delegate
picker.delegate = self;
picker.dataSource = self;

//Add the picker to the alert controller
alert.view.addSubview(picker);

//Create the toolbar view - the view witch will hold our 2 buttons
var toolFrame = CGRectMake(17, 5, 270, 45);
var toolView: UIView = UIView(frame: toolFrame);

//add buttons to the view
var buttonCancelFrame: CGRect = CGRectMake(0, 7, 100, 30); //size & position of the button as placed on the toolView

//Create the cancel button & set its title
var buttonCancel: UIButton = UIButton(frame: buttonCancelFrame);
buttonCancel.setTitle("Cancel", forState: UIControlState.Normal);
buttonCancel.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal);
toolView.addSubview(buttonCancel); //add it to the toolView

//Add the target - target, function to call, the event witch will trigger the function call
buttonCancel.addTarget(self, action: "cancelSelection:", forControlEvents: UIControlEvents.TouchDown);


//add buttons to the view
var buttonOkFrame: CGRect = CGRectMake(170, 7, 100, 30); //size & position of the button as placed on the toolView

//Create the Select button & set the title
var buttonOk: UIButton = UIButton(frame: buttonOkFrame);
buttonOk.setTitle("Select", forState: UIControlState.Normal);
buttonOk.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal);
toolView.addSubview(buttonOk); //add to the subview

//Add the tartget. In my case I dynamicly set the target of the select button
if(sentBy == "profile"){
buttonOk.addTarget(self, action: "saveProfile:", forControlEvents: UIControlEvents.TouchDown);
} else if (sentBy == "user"){
buttonOk.addTarget(self, action: "saveUser:", forControlEvents: UIControlEvents.TouchDown);
}

//add the toolbar to the alert controller
alert.view.addSubview(toolView);

self.presentViewController(alert, animated: true, completion: nil);
}

func saveProfile(sender: UIButton){
// Your code when select button is tapped

}

func saveUser(sender: UIButton){
// Your code when select button is tapped
}

func cancelSelection(sender: UIButton){
println("Cancel");
self.dismissViewControllerAnimated(true, completion: nil);
// We dismiss the alert. Here you can add your additional code to execute when cancel is pressed
}

// returns number of rows in each component..
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
if(pickerView.tag == 1){
return self.profilesList.count;
} else if(pickerView.tag == 2){
return self.usersList.count;
} else {
return 0;
}
}

// Return the title of each row in your picker ... In my case that will be the profile name or the username string
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
if(pickerView.tag == 1){

var selectedProfile: Profiles = self.profilesList[row] as Profiles;
return selectedProfile.profileName;

} else if(pickerView.tag == 2){

var selectedUser: Users = self.usersList[row] as Users;
return selectedUser.username;

} else {

return "";

}

}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if(pickerView.tag == 1){
var choosenProfile: Profiles = profilesList[row] as Profiles;
self.selectedProfile = choosenProfile.profileName;
} else if (pickerView.tag == 2){
var choosenUser: Profiles = usersList[row] as Users;
self.selectedUsername = choosenUser.username;
}

}

关于ios - 有没有办法在 Swift 中将 UIPickerView 添加到 UIAlertController(Alert 或 ActionSheet)中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25545982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com