我正在开发基于消息的iPhone应用程序。我有一个屏幕可以回复收到的消息。该屏幕包含两个UITextView,例如bottomTextView和topTextView。

topTextView被添加为bottomTextView的InputAccessory视图

当用户进入屏幕时, topTextView必须成为FirstResponder 。它正在显示,但光标未放置在topTextView中。光标位于textview bottomTextView中。如何使topTextView成为具有光标的第一响应者?

这是我尝试过的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    bottomBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 380, 320, 40)];
    bottomBarViewImage.image = [UIImage imageNamed: @"toolbarbg~iphone.png"];
    [bottomBarView addSubview: bottomBarViewImage];
    [self.view addSubview: bottomBarView];

    bottomTextView = [[UITextView alloc] initWithFrame:CGRectMake(35, 7.5, 210, 25)];
    bottomTextView.delegate = self;
    bottomTextView.backgroundColor = [UIColor clearColor];
    bottomTextView.font = [UIFont fontWithName:@"Helvetica" size:14];
    bottomTextView.scrollEnabled = NO;
    [bottomBarView addSubview: bottomTextView];

    topBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 380, 320, 40)];
    topBarViewImage.image = [UIImage imageNamed: @"toolbarbg~iphone.png"];
    [topBarView addSubview: topBarViewImage];

    topTextView = [[UITextView alloc] initWithFrame:CGRectMake(35, 7.5, 210, 25)];
    topTextView.delegate = self;
    topTextView.backgroundColor = [UIColor clearColor];
    topTextView.font = [UIFont fontWithName:@"Helvetica" size:14];
    topTextView.scrollEnabled = NO;
    [topBarView addSubview: topTextView];

    [bottomTextView becomeFirstResponder];
    [bottomTextView setInputAccessoryView: topBarView];
}

-(void) textViewDidBeginEditing:(UITextView *)textView
{
    if(textView == bottomTextView)
    {
        bottomTextView.scrollEnabled = NO;

        [topTextView becomeFirstResponder];
    }
}

正在显示带有topTextViewtopBarView,但光标未置于topTextView中。您能帮我解决这个问题吗?提前致谢。

最佳答案

我认为可能是因为您在UITextView的委托[topTextView becomeFirstResponder];中调用了textViewDidBeginEditing:。因此,当您开始编辑bottomTextView时,topTextView仅成为第一响应者。尝试在viewDidLoad中调用[topTextView becomeFirstResponder];而不是[bottomTextView becomeFirstResponder];。看看进展如何。我不确定,但是becomeFirstResponder可能不会调用textViewDidBeginEditing:。不确定是否可以使用,但值得尝试...

编辑:

我发现了一个相关的问题here。可能是因为textView没有立即显示,所以它不能成为第一响应者。这是@Tom接受的答案:

我的解决方案:检查键盘(以及附件视图)的时间
出现了!

步骤1)侦听通知(确保已读取此代码
在您想要收到通知之前)。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(changeFirstResponder)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];

步骤2)出现键盘后,您可以在
您的inputaccessory视图将成为第一响应者:
-(void)changeFirstResponder
{
    [textField becomeFirstResponder]; //will return TRUE;
}

关于iphone - UITextView无法从另一个UITextView附件 View iPhone响应吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12458706/

10-09 23:56