在点击UITextField时显示UITableView

时间:2014-01-15 09:10:15

标签: ios objective-c uitableview uitextview uitextfielddelegate

我希望在点击UITableView时显示UITextView。  键盘不应该显示。  问题是点击UITextView同时显示UITableView和键盘。  我只希望显示表格视图。我想显示从UITextView获取的不可编辑的网络服务的数据。按导航栏中的编辑按钮,点击UITextViewUITableView时应该弹出而不是键盘。

我的代码如下:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{

if([text isEqualToString:@"\n"]) {
    [textView resignFirstResponder];
    return NO;
}

return YES;
}

-(void)textViewDidBeginEditing:(UITextView *)textView{


[self.view endEditing:YES];

tableVw=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, 320, 500)];
tableVw.dataSource=self;
tableVw.delegate=self;


[self.view addSubview:tableVw];

 }
 -(void)viewDidLoad{

 [super viewDidLoad];

 txtVwDescription=[[UITextView alloc]initWithFrame:CGRectMake(10, 270, 300,stringSize.height+10)];
 txtVwDescription.backgroundColor=[UIColor clearColor];
txtVwDescription.layer.cornerRadius=5;
txtVwDescription.backgroundColor=[UIColor colorWithRed:0.662745 green:0.662745 blue:0.662745 alpha:0.3];

[txtVwDescription setFont:[UIFont systemFontOfSize:13.0]];
txtVwDescription.contentInset=UIEdgeInsetsMake(0, 0, 0, 0);
[txtVwDescription setUserInteractionEnabled:NO];
txtVwDescription.editable=NO;
txtVwDescription.delegate=self;
[self.view addSubview:txtVwDescription];
}

 -(void)edit{
 [txtVwDescription setUserInteractionEnabled:YES];
 txtVwDescription.editable=NO;
 [txtVwDescription resignFirstResponder];
 }

3 个答案:

答案 0 :(得分:5)

您可以使用UITextViewDelegate的textViewShouldBeginEditing方法返回NO,并在那里显示UITableView。这样就不应该出现键盘了。

答案 1 :(得分:0)

我发现更简单地禁用textView的编辑并添加一个手势识别器,而不是不得不混淆textViewDelegate方法:

    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showTableView)];

    UITextView *textView = [[UITextView alloc] initWithFrame:....];
    textView.editable = NO;
    [textView addGestureRecognizer:tapGestureRecognizer];

这样,没有键盘显示,你不必乱用委托方法内的导航。您现在需要做的就是使用您提供识别器的方法处理水龙头:

- (void)showTableView {
    // do stuff here
}

编辑:

如果您不打算让它可编辑,您可能还想考虑使用UILabel而不是UITextView。您也可以实现相同的手势识别器代码,只需将其添加到标签而不是textView。

答案 2 :(得分:0)

UITextFieldUITextView类有一个名为inputView的属性,用于显示自定义视图而不是默认键盘。当textfield / view成为第一响应者时,系统显示您为该属性设置的任何UIView后代类。所以简单地添加,

UITextView *textView = [[UITextView alloc] initWithFrame:someFrame];
textView.inputView = self.myTableView; //this is your already initialised tableview