UIAlertView
사용자 에게 a 를 제시하고 있는데 처리기를 작성하는 방법을 알 수 없습니다. 이것은 내 시도입니다.
let alert = UIAlertController(title: "Title",
message: "Message",
preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Okay",
style: UIAlertActionStyle.Default,
handler: {self in println("Foo")})
Xcode에서 많은 문제가 발생합니다.
문서에 따르면 convenience init(title title: String!, style style: UIAlertActionStyle, handler handler: ((UIAlertAction!) -> Void)!)
전체 블록 / 폐쇄는 현재 내 머리 위에 약간 있습니다. 어떤 제안이라도 대단히 감사합니다.
답변
핸들러에 self 대신 (alert : UIAlertAction!)을 넣으십시오. 이렇게하면 코드가 다음과 같이 보일 것입니다.
alert.addAction(UIAlertAction(title: "Okay",
style: UIAlertActionStyle.Default,
handler: {(alert: UIAlertAction!) in println("Foo")}))
이것은 Swift에서 핸들러를 정의하는 적절한 방법입니다.
Brian이 아래에서 지적했듯이 이러한 처리기를 정의하는 더 쉬운 방법도 있습니다. 그의 방법을 사용하는 방법은 책에서 논의됩니다. Closures 섹션을보십시오.
답변
함수는 Swift에서 일류 객체입니다. 따라서 클로저를 사용하지 않으려면 적절한 서명을 사용하여 함수를 정의한 다음 handler
인수 로 전달할 수도 있습니다. 관찰 :
func someHandler(alert: UIAlertAction!) {
// Do something...
}
alert.addAction(UIAlertAction(title: "Okay",
style: UIAlertActionStyle.Default,
handler: someHandler))
답변
swift 2를 사용하여 이렇게 간단하게 할 수 있습니다.
let alertController = UIAlertController(title: "iOScreator", message:
"Hello, world!", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Destructive,handler: { action in
self.pressed()
}))
func pressed()
{
print("you pressed")
}
**or**
let alertController = UIAlertController(title: "iOScreator", message:
"Hello, world!", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Destructive,handler: { action in
print("pressed")
}))
위의 모든 대답은 정확합니다. 나는 단지 할 수있는 다른 방법을 보여주고 있습니다.
답변
기본 제목, 두 가지 작업 (저장 및 삭제) 및 취소 버튼이있는 UIAlertAction이 필요하다고 가정 해 보겠습니다.
let actionSheetController = UIAlertController (title: "My Action Title", message: "", preferredStyle: UIAlertControllerStyle.ActionSheet)
//Add Cancel-Action
actionSheetController.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
//Add Save-Action
actionSheetController.addAction(UIAlertAction(title: "Save", style: UIAlertActionStyle.Default, handler: { (actionSheetController) -> Void in
print("handle Save action...")
}))
//Add Discard-Action
actionSheetController.addAction(UIAlertAction(title: "Discard", style: UIAlertActionStyle.Default, handler: { (actionSheetController) -> Void in
print("handle Discard action ...")
}))
//present actionSheetController
presentViewController(actionSheetController, animated: true, completion: nil)
이것은 swift 2 (Xcode 버전 7.0 베타 3)에서 작동합니다.
답변
신속한 3.0의 구문 변경
alert.addAction(UIAlertAction(title: "Okay",
style: .default,
handler: { _ in print("Foo") } ))
답변
Swift 4에서 :
let alert=UIAlertController(title:"someAlert", message: "someMessage", preferredStyle:UIAlertControllerStyle.alert )
alert.addAction(UIAlertAction(title: "ok", style: UIAlertActionStyle.default, handler: {
_ in print("FOO ")
}))
present(alert, animated: true, completion: nil)
답변
이것이 xcode 7.3.1로 수행하는 방법입니다.
// create function
func sayhi(){
print("hello")
}
// 버튼 생성
let sayinghi = UIAlertAction(title: "More", style: UIAlertActionStyle.Default, handler: { action in
self.sayhi()})
// 경고 컨트롤에 버튼 추가
myAlert.addAction(sayhi);
// 전체 코드,이 코드는 2 개의 버튼을 추가합니다.
@IBAction func sayhi(sender: AnyObject) {
let myAlert = UIAlertController(title: "Alert", message:"sup", preferredStyle: UIAlertControllerStyle.Alert);
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:nil)
let sayhi = UIAlertAction(title: "say hi", style: UIAlertActionStyle.Default, handler: { action in
self.sayhi()})
// this action can add to more button
myAlert.addAction(okAction);
myAlert.addAction(sayhi);
self.presentViewController(myAlert, animated: true, completion: nil)
}
func sayhi(){
// move to tabbarcontroller
print("hello")
}