gpt4 book ai didi

swift - 为什么我的 UIPickerview 无法在 UIAlertcontroller 中工作?

转载 作者:行者123 更新时间:2023-11-30 13:23:34 25 4
gpt4 key购买 nike

我需要在警报 View Controller 中显示一个选择器 View ,为此我遵循的是

//用于警报 View Controller

let alertController = UIAlertController(title: "Hey!", message: "MESSAGE?", preferredStyle: .Alert)
let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
alertController.addAction(defaultAction)

//用于选择器 View

let monthlyStatement = UIStoryboard(name: "Second", bundle: nil).instantiateViewControllerWithIdentifier("MonthlyStatement")
monthlyStatement.view.frame = CGRectMake(0, 0, 280, 260)
alertController.view.addSubview(monthlyStatement.view)
presentViewController(alertController, animated: true, completion: nil)

monthlyStatement 选择器 View 将完美显示,但不会滚动,

每当我尝试单击(选择器 View /选择器 View 组件)时,它都会立即关闭我的警报 View Controller 。那么如何解决这些问题呢。预先感谢您

最佳答案

你可以这样实现。

 func showPickerInActionSheet(sentBy: String) {
var title = "picker"
var message = "Picker controller";
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;
}

}

关于swift - 为什么我的 UIPickerview 无法在 UIAlertcontroller 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37486320/

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