2014-12-08 3 views
0

На iOS 7, когда представлен UIAlertView, его кнопки, похоже, автоматически устанавливают exclusiveTouch=YES. Таким образом, если вы одновременно нажимаете более одной кнопки в режиме предупреждения, ничего страшного не произойдет.UIAlertView exclusiveTouch на кнопках iOS8

Это не относится к iOS 8. Когда я представляю UIAlertView с двумя кнопками. И я нажимаю эти 2 кнопки одновременно, приложение замерзает.

Я не могу получить доступ к UIButton с на этом UIAlertView. Я не могу получить доступ к любому из подзонов UIAlertView. alertView.subview возвращает пустой массив, независимо от того, в какой части жизненного цикла я его называю.

+0

, пожалуйста, добавьте свой код в описание. Также для iOS8 вы можете использовать UIAlertViewController. – gronzzz

+0

Я не вижу необходимости публиковать код. Я выражаю утверждение о том, что кнопки внутри UIAlertView имеют логическое свойство exclusiveTouch, которое всегда равно NO. Это утверждение является либо истинным, либо ложным. Я рассматриваю это как довольно теоретический вопрос. Кроме того, я использую свой собственный подкласс UIAlertView, который якобы добавит сложность вопроса. – ancajic

ответ

2

Мне удалось найти решение проблемы. Я реализовать метод делегата в UIAlertView в:

-(void)didPresentAlertView:(UIAlertView *)alertView 
{ 
    UIView *view = ((UIApplication*)[UIApplication sharedApplication]).keyWindow.rootViewController.presentedViewController.view; 
    [self setExclusiveTouchForView:view]; 
} 

-(void) setExclusiveTouchForView:(UIView*)view 
{ 
    for (UIView *subview in view.subviews) { 
     subview.exclusiveTouch = YES; 
     [self setExclusiveTouchForView:subview]; 
    } 
} 

Сначала это было заблуждение, чтобы увидеть, что ни один из всех подвидов внутри переменной view имеет класс UIButton или UIControl.

На самом деле нет необходимости устанавливать exclusiveTouch объект на все подземелий. Но я опубликовал его так, чтобы уменьшить сложность кода.

Он отлично работает. Приложение больше не зависает, когда одновременно нажаты обе кнопки UIAlertView. Принимается только один из прессов.

+0

Вы действительно должны использовать uialertcontroller, а не uialertview в iOS 8 – Fogmeister

+0

Мое приложение поддерживает как iOS7, так и iOS8, и в настоящее время это похоже на лучший способ избежать умножения кода IF-THEN. – ancajic

+0

Ах, хорошо, справедливо, – Fogmeister