如何滚动通知控制器中的操作? Xcode 8,Swift 3,IOS

请帮忙! :)我是一个巨大的noobie在这里。 我从各种来源收集这些代码,所以我不知道我在做什么。 我的提醒控制器显示一个我可以写入的文本框,一个“取消”操作,一个“确定”操作,还显示多个“input关键字到标签”操作。

它有很多动作(我需要大约20个关键字动作),它们不适合在屏幕上,它被键盘覆盖,或者是在键盘的方式。 它看起来很丑,一些你不能触摸的button。 有没有办法滚动我的行动,使其适合这个空间?

这是我最后一张图片的代码:

//Quality Text Box (9) @IBOutlet weak var QualityLabel: UILabel! @IBAction func QualityTapped(_ sender: UIButton) { print("Quality Button Tapped") openQualityAlert() } func openQualityAlert() { //Create Alert Controller let alert9 = UIAlertController (title: "Quality:", message: nil, preferredStyle: UIAlertControllerStyle.alert) //Create "Keyword -> label" actions let bt1 = UIAlertAction(title: "Abuse", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Abuse"} alert9.addAction(bt1) let bt2 = UIAlertAction(title: "Hemmorhage", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Hemmorhage"} alert9.addAction(bt2) let bt3 = UIAlertAction(title: "Discomfort", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Discomfort"} alert9.addAction(bt3) let bt4 = UIAlertAction(title: "Acute", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Acute"} alert9.addAction(bt4) let bt5 = UIAlertAction(title: "Disease", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Disease"} alert9.addAction(bt5) let bt6 = UIAlertAction(title: "Rash", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Rash"} alert9.addAction(bt6) let bt7 = UIAlertAction(title: "Itch", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Itch"} alert9.addAction(bt7) let bt8 = UIAlertAction(title: "Burn", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Burn"} alert9.addAction(bt8) let bt9 = UIAlertAction(title: "Abuse", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Abuse"} alert9.addAction(bt9) let bt10 = UIAlertAction(title: "Hemmorhage", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Hemmorhage"} alert9.addAction(bt10) let bt11 = UIAlertAction(title: "Discomfort", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Discomfort"} alert9.addAction(bt11) let bt12 = UIAlertAction(title: "Acute", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Acute"} alert9.addAction(bt12) let bt13 = UIAlertAction(title: "Disease", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Disease"} alert9.addAction(bt13) let bt14 = UIAlertAction(title: "Rash", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Rash"} alert9.addAction(bt14) let bt15 = UIAlertAction(title: "Itch", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Itch"} alert9.addAction(bt15) let bt16 = UIAlertAction(title: "Burn", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Burn"} alert9.addAction(bt16) let bt17 = UIAlertAction(title: "Abuse", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Abuse"} alert9.addAction(bt17) let bt18 = UIAlertAction(title: "Hemmorhage", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Hemmorhage"} alert9.addAction(bt18) let bt19 = UIAlertAction(title: "Discomfort", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Discomfort"} alert9.addAction(bt19) let bt20 = UIAlertAction(title: "Acute", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Acute"} alert9.addAction(bt20) let bt21 = UIAlertAction(title: "Disease", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Disease"} alert9.addAction(bt21) let bt22 = UIAlertAction(title: "Rash", style: UIAlertActionStyle.default){ (action) in self.QualityLabel.text = "Rash"} alert9.addAction(bt22) //Create Cancel Action let cancel9 = UIAlertAction(title: "CANCEL", style: UIAlertActionStyle.cancel, handler: nil) alert9.addAction(cancel9) //Create OK Action let ok9 = UIAlertAction(title: "INPUT TEXTFIELD", style: UIAlertActionStyle.default) { (action: UIAlertAction) in print("OK") let textfield = alert9.textFields?[0] print(textfield?.text!) self.QualityLabel.text = textfield?.text! } alert9.addAction(ok9) //Add Text Field alert9.addTextField { (textfield: UITextField) in textfield.placeholder = "Quality" } //Present Alert Controller self.present(alert9, animated:true, completion: nil) } 

尽pipe我find了滚动到UIAlertController操作顶部的方法,
我不build议这样做 ,因为我不知道你的应用程序是否会被拒绝。

我认为这个答案只适用于iOS 10+

 self.present(alert, animated: true, completion: { //print(alert.view) // _UIAlertControllerView //print(alert.view.subviews) // [UIView] //print(alert.view.subviews[0].subviews) // [_UIAlertControllerInterfaceActionGroupView] //print(alert.view.subviews[0].subviews[0].subviews) // [_UIDimmingKnockoutBackdropView, UIView] //print(alert.view.subviews[0].subviews[0].subviews[0].subviews) // [UIView, UIVisualEffectView] //print(alert.view.subviews[0].subviews[0].subviews[1].subviews) // [_UIInterfaceActionGroupHeaderScrollView, _UIInterfaceActionItemSeparatorView_iOS, _UIInterfaceActionRepresentationsSequenceView] // _UIInterfaceActionRepresentationsSequenceView <- This is what we want // In this view are all your added actions. It is a subview of UIScrollView, so just cast it and set the contentOffset to zero if let scrollView = alert.view.subviews[0].subviews[0].subviews[1].subviews[2] as? UIScrollView { scrollView.setContentOffset(.zero, animated: true) } }) 

这可能无法正常工作,因为我不检查子视图是否按此顺序。
未来的iOS更新也可能完全崩溃这种方法。
另外我只是在iPhone上testing这个。 我不知道它是否适用于iPad。

或多或less安全的方式(build议欢迎):

 self.present(alert, animated: true, completion: { guard alert.view.subviews.count >= 1 else { return } guard alert.view.subviews[0].subviews.count >= 1 else { return } guard alert.view.subviews[0].subviews[0].subviews.count >= 2 else { return } guard alert.view.subviews[0].subviews[0].subviews[1].subviews.count >= 3 else { return } if let scrollView = alert.view.subviews[0].subviews[0].subviews[1].subviews[2] as? UIScrollView { scrollView.setContentOffset(.zero, animated: true) } }) 

使用此代码设置您的alertcontroller类

https://gist.github.com/petrpavlik/0c5feaada5913cafde8a