Подкласс UIViewController не получает касаний, начиная с iphone ipad

Итак, я разделил UIViewController на подклассы, и в пере у меня есть UIView, а в нем табличное представление. Насколько я понимаю, и UIViewController, и UIView являются подклассами UIResponder, поэтому они должны получать метод события - (void) touchesBegan: (NSSet *) touch withEvent: (UIEvent *).

Однако это не так, и мой подкласс контроллера представления не получает этот метод. Я бы действительно хотел не создавать подклассы UIView, если это нормально.

Я пытаюсь реализовать это, но мой

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [textfield resignFirstResponder];
}

Не звонят.


person user396004    schedule 01.09.2010    source источник


Ответы (4)


Это зависит от того, куда вы прикасаетесь. Если вы коснетесь в табличном представлении, прикосновения будут отправлены в табличное представление, а не в контроллер представления. Если вы коснетесь текстового поля, которое находится в вашем представлении, прикосновения будут отправлены в сам UITextField. Если вы коснетесь вне табличного представления, вне текстового поля, но в представлении контроллеров представления, тогда контроллер представления должен получить эти прикосновения.

person progrmr    schedule 01.09.2010

Если вы измените представление своего VC на UIControl (UIControl является суперклассом UIView) в IB, вы можете назначить ему IBAction. У вас может быть текстовое поле resignFirstResponder в этом действии.

person MishieMoo    schedule 01.09.2010
comment
UIView - это UIControl, ничего менять не нужно. Вы можете назначать действия для UIViews. - person progrmr; 02.09.2010
comment
Не обошлось и без подкласса UIView, чего не хочет плакат. Если вы измените его на UIControl, вы получите доступ к событиям, так что вы можете установить для него значение touchDown или touchUpInside в IB, не прибегая к помощи кода. Я делал это раньше. UIView не перечисляет события касания. - person MishieMoo; 02.09.2010

К сожалению, touchBegan имеет место только в представлении, несмотря на то, что UIViewController является подклассом UIReponder. Документы по касаниям начали так говорить.

Сообщает получателю, когда один или несколько пальцев касаются вида или окна.

person Jerry Jones    schedule 01.09.2010
comment
touchesBegan также поддерживается в UIViewController. Я широко использую его в одном из своих приложений, чтобы позволить пользователю переупорядочивать представления в контроллере просмотра. - person progrmr; 02.09.2010
comment
UIViewController действительно участвует в цепочке респондентов и поэтому получит touchesBegan так же, как и UIView. - person Boon; 02.02.2012
comment
UIViewController вставляется в цепочку респондентов в iOS 3 и более поздних версиях. - person bbrame; 29.02.2012
comment
developer.apple.com/library/ios/#DOCUMENTATION/EventHandling/ Представление проверки нажатия или первый респондент передает событие или сообщение своему контроллеру представления, если он у него есть; если у представления нет контроллера представления, оно передает событие или сообщение своему супервизору. Если представление или его контроллер представления не может обработать событие или сообщение, он передает его супервизору представления. - person bbrame; 29.02.2012
comment
Я рад видеть, что так много людей проголосовали против моего ужасного ответа. Я явно работал с некоторыми крайне устаревшими знаниями. - person Jerry Jones; 26.06.2012

Является ли UIView, о котором вы говорите, созданным вами, или вы используете тот, который снабжен UIViewController? Более того, если щелчок произойдет в UITableView, вам придется создать подкласс, чтобы ваш UIViewController знал, что щелчок произошел в табличном представлении ...

person TheSquad    schedule 01.09.2010