Как сделать UITextView сталFirstResponder после касания его подпредставления UIView? - PullRequest
2 голосов
/ 03 июня 2011

ОБНОВЛЕНИЕ : я нашел простое решение .Я знал, что есть один!

У меня есть подкласс UIView с именем tipBalloon, который я добавил как подпредставление UITextView, но когда я касаюсь tipBalloon, он не фокусируетсядаже если текст tipBalloon.userInteractionEnabled = YES (по умолчанию).

Как сделать так, чтобы при касании tipBalloon касание перенаправлялось на UITextView?Разве это не должно произойти автоматически?

Вот пример:

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UITextView *payTextView = [[UITextView alloc] initWithFrame:CGRectMake(5.0f, 30.0f, 180.0f, 100.0f)];
    [window addSubview:payTextView];

    UIView *tipBalloon = [[UIView alloc] initWithFrame:CGRectMake(6.0f, 10.0f, 100.0f, 30.0f)];
    tipBalloon.backgroundColor = [UIColor orangeColor];
    [payTextView addSubview:tipBalloon];
    [tipBalloon release];

    window.backgroundColor = [UIColor brownColor];
    [window makeKeyAndVisible];
    return YES;
}

Ответы [ 3 ]

3 голосов
/ 04 июня 2011

ОБНОВЛЕНИЕ : Более простое решение - просто установить tipBalloon.userInteractionEnabled = NO. Это заставляет tipBalloon игнорировать любые касания, которые затем передаются на UITextView. Я изучил эту технику у @ elizablock во время просмотра видеофильма WWDC 2011 Advanced Scroll View Techniques .

Вот решение, основанное на @ dredful's (немного прибрано). Добавьте следующий блок кода перед [tipBalloon release];:

// Focus payTextView after touching payTextExample.
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:
                                     payTextView action:@selector(becomeFirstResponder)];
[tipBalloon addGestureRecognizer:singleTap];
[singleTap release];
1 голос
/ 03 июня 2011

Если я правильно понимаю ваш вопрос, вам необходимо зарегистрировать взаимодействие с UIView.Для UIView, вероятно, лучше всего добавить UITapGestureRecognizer к tipBalloon

Внутри tipBalloon viewDidAppear: вы можете поместить:

[self addGestureRecognizerToUIView:self.view];

Эти методы есть в вашем tipBalloon

- (void)addGestureRecognizerToUIView:(id)thisUIView
{
    // Single Tap
    UITapGestureRecognizer *thisTap = [[UITapGestureRecognizer alloc] initWithTarget:self 
                                                                               action:@selector(handleTap:)];
    thisTap.numberOfTapsRequired = 1;
    [thisUIView addGestureRecognizer:thisTap];
    [thisTap release];

}

- (void)handleTap:(UITapGestureRecognizer *)gesture {
    [yourUITextView becomeFirstResponder];
}

Это добавит сигнал в ваш tipBalloon UIView.Когда сигнал срабатывает, он может установить UITextView в качестве первого ответчика.

1 голос
/ 03 июня 2011

Если UIView - это подпредставление вашего textView, вы можете вызвать [tipBalloon.superview becomeFirstResponder]

...