我希望在点击UITableView
时显示UITextView
。
键盘不应该显示。
问题是点击UITextView
同时显示UITableView
和键盘。
我只希望显示表格视图。我想显示从UITextView
获取的不可编辑的网络服务的数据。按导航栏中的编辑按钮,点击UITextView
,UITableView
时应该弹出而不是键盘。
我的代码如下:
- (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];
}
答案 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)
UITextField
和UITextView
类有一个名为inputView
的属性,用于显示自定义视图而不是默认键盘。当textfield / view成为第一响应者时,系统显示您为该属性设置的任何UIView
后代类。所以简单地添加,
UITextView *textView = [[UITextView alloc] initWithFrame:someFrame];
textView.inputView = self.myTableView; //this is your already initialised tableview