Все Я реализую расширение UIAlertView для реализации обратного вызова, например UIAlertView + Block в Objective C, но метод делегата не вызывает из этого класса никакой помощи. Спасибо заранее.Вызов метода делегата из класса расширения Swift
ответ
Обратный вызов от тревоги взгляда работает в фоновом потоке и код его получение, вероятно, работает в основном потоке, согласно яблочной документации:
От компании Apple iOS Documentation on Notification Centers:
В многопоточное приложение, уведомления всегда отправляются в поток, в котором было отправлено уведомление, которое может быть не того же потока, в котором наблюдатель зарегистрировал себя.
Вам необходимо позвонить уведомление обратно в основной поток в противном случае могут происходить странные вещи
dispatch_async(dispatch_get_main_queue(), {
//Call your notification from here
NSNotificationCenter.defaultCenter().postNotificationName(mySpecialNotificationKey, object: self)
})
Спасибо, IcaroNZ, но мой метод делегата не называется как сказано. –
@GopalDevra вы можете разместить свой код, чтобы мы помогли вам его просмотреть? – Icaro
Это обновленный ответ после решения этого вопроса.
typealias SelectBlock = (buttonIndex : Int) -> Void
typealias CancelBlock =() -> Void
private var blockSelect : SelectBlock?
private var blockCancel : CancelBlock?
extension UIAlertView {
//Initilization
func initWithTitle(
title : String ,
message : String,
onSelect : SelectBlock?,
onCancel : CancelBlock?,
otherButtonTitles : [String]){
//Initialize
self.title = title
self.delegate = self
self.message = message
//Block
if let onSelectObj = onSelect? {
blockSelect = onSelectObj
}
if let onCancelObj = onCancel? {
blockCancel = onCancelObj
}
//Other buttons
for buttons in otherButtonTitles {
self.addButtonWithTitle(buttons)
}
//Cancel index
// println("buttons \(self.numberOfButtons)")
self.cancelButtonIndex = 0
self.show()
}
func alertView(alertView: UIAlertView, didDismissWithButtonIndex buttonIndex: Int) {
println("Index \(buttonIndex)")
if buttonIndex == alertView.cancelButtonIndex {
blockCancel!()
// println("Cancel")
}else{
blockSelect!(buttonIndex: buttonIndex)
// println("Retry")
}
}
}
Ваш класс уже является UIAlertView, и вы создаете еще один UIAlertView, вы должны изменить все alertView для себя. Это должно решить вашу проблему. – Icaro
Хорошо, я собираюсь проверить. –
Большое спасибо IcaroNZ, он работает хорошо. –
- 1. вызов метода делегата в расширении класса, Swift
- 2. Вызов метода класса NSObject из делегата приложения
- 3. Вызов метода для делегата Objective-C из Swift
- 4. Вызов метода в классе расширения объекта-класса в swift
- 5. Вызов метода делегата из ошибки потока
- 6. Вызов метода делегата UICollectionViewCell
- 7. Вызов метода внутри делегата
- 8. Вызов метода UIViewController из делегата приложения
- 9. Брус вызов метода делегата из моего класса протокола
- 10. Вызов метода контроллера представления из класса делегата, имеющего проблемы
- 11. Вызов универсального метода/делегата из базового базового класса
- 12. Вызов метода AppDelegate из класса
- 13. Swift - Делегировать вызов вызывающего метода из другого класса
- 14. Вызов метода расширения для нового класса
- 15. Вызов методов делегата из другого класса
- 16. Вызов метода перенаправления внутри делегата
- 17. Вызов метода из класса
- 18. Вызов метода из класса
- 19. Cocos3D: вызов метода делегата из CC3Scene
- 20. Вызов метода делегата приложения из контроллера вида
- 21. Вызов пользовательского делегата из AppDelegate в Swift
- 22. Вызов метода расширения контроллера из вида
- 23. Зачем вызывать вызов метода делегата?
- 24. Вызов метода делегата в Java
- 25. Вызов родительского метода из класса
- 26. Вызов метода java из расширения Thunderbird
- 27. Вызов метода делегата не работает
- 28. Вызов метода делегата в UIViewController
- 29. Вызов метода в абстрактном классе после метода расширения класса?
- 30. вызов метода класса объектива-c в swift
Можете ли вы разместить свой код здесь. – tounaobun