2017-01-03 11 views
0
let alert = UIAlertController(title: "Breaking Point Stack", message: "What's the average breaking point stack you have?", preferredStyle: UIAlertControllerStyle.alert) 

alert.addTextField() { textField in 
    textField.backgroundColor = UIColor.clear 
    textField.useUnderLine() 
} 

self.present(alert, animated: true, completion: nil) 

テキストフィールドには背景色も白い線も表示されませんが、警告コントローラが表示されてもテキストフィールドの背景は白と黒の境界線。UIAlertControllerのテキストフィールドの背景色を変更しても動作しません。

func useUnderLine() { 
    self.borderStyle = .none 
    self.layoutIfNeeded() 

    let border = CALayer() 
    let width = CGFloat(1.0) 
    border.borderColor = UIColor.white.cgColor 
    border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: width) 
    border.borderWidth = width 

    self.layer.addSublayer(border) 
    self.layer.masksToBounds = true 
} 
+0

本当にデフォルトのUIAlertControllerの背景色を変更したい場合は、@bubuxuの答えが正しいです。しかし、アップルが新しいアップデートをプッシュしたときにあなたのコードを壊す可能性があるので、あなたは本当にそれをするべきではありません。これを行う最善の方法は、独自のアラートコントローラを作成することです。 –

答えて

1

あなたはビュー階層によって、それをデバッグする場合は、境界&背景スタイルは、実際のUITextFieldによって決定されていない、図1のように

View hierarchy

あなた:ここに

useUnderLine()ためのコードですこの変更を行う:

extension UITextField { 

    func useUnderLine() { 

     .... 

     superview?.backgroundColor = .clear 

     let view = superview?.superview 
     view?.subviews.first?.alpha = 0 
     view?.backgroundColor = .clear 

    } 

} 

もpresending機能を変更します。

present(alert, animated: false, completion: { 
     if let textField = alert.textFields?.first { 
      textField.useUnderLine() 
     } 
    }) 

Screenshot

しかし、意識ビュー階層は、将来的に異なるのiOSバージョンの異なる場合がありますことを。

関連する問題