我想在UITextView中向UITableViewCell添加一些静态文本。
UITextView *addressField = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 300, 75)];
[addressField setBackgroundColor:[UIColor clearColor]];
[addressField setFont:[UIFont fontWithName:@"HelveticaNeue" size:14]];
[addressField setContentInset:UIEdgeInsetsMake(0, 20, 0, 0)];
[addressField setEditable:NO];
[addressField setScrollEnabled:NO];
// change me later
[addressField setText:@"John Doe\n555 Some Street\nSan Francisco, CA, 00000"];
[cell.contentView addSubview:addressField];
[addressField release];
这很好用,但是这个代码使得单元格无法选择,可能是因为UITextView覆盖了整个单元格。
如何解决这个问题,以便我可以同时拥有UITextView和可选择的单元格?
顺便说一句,我可以让UITextView的大小更小一些,但是如果他们触摸UITextView,用户仍然无法选择单元格。答案 0 :(得分:2)
我认为稍微好一点的方法是在整个桌子上创建一个轻击手势识别器。 (例如在viewDidLoad中)
// gesture recognizer to make the entire cell a touch target
UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(changeFocus:)];
[tableView addGestureRecognizer:tap];
[tap release];
然后创建一个选择器(在这种情况下为changeFocus:)进行实际选择。
- (void)changeFocus:(UITapGestureRecognizer *)tap
{
if (tap.state == UIGestureRecognizerStateEnded)
{
CGPoint tapLocation = [tap locationInView:self.tableView];
NSIndexPath* path = [self.tableView indexPathForRowAtPoint:tapLocation];
[self tableView:self.tableView didSelectRowAtIndexPath:path];
}
}
您可以使changeFocus方法更精细,以防止选择或将焦点放在所选indexPath的特定子视图上。
答案 1 :(得分:1)
[addressField setUserInteractionEnabled:NO];
答案 2 :(得分:1)
我希望这会对你有所帮助:
[self.view insertSubview:TextView aboveSubview:TableView];
反之亦然,基于您的要求。
答案 3 :(得分:1)
我会采用以下方法,以便与UITextView和UITableViewCell保持交互。
您的代码可能如下所示:
在表视图控制器.h文件中:
@interface MyTableViewController : UITableViewController <UITextViewDelegate> { ...
...
}
在表视图控制器.m文件中:
UITextView *addressField = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 300, 75)];
[addressField setDelegate:self];
...
然后实现此函数(或任何其他合适的UITextViewDelegate函数):
- (void)textViewDidChangeSelection:(UITextView *)textView {
// Determine which text view triggered this method in order to target the right cell
...
// You should have obtained an indexPath here
...
// Call the following function to trigger the row selection table view delegate method
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]
}
请注意,还有其他替代方法,如子类化UITextView并处理它的触摸方法。我建议使用其代表协议提供的可能性。
另请注意,将UITextView声明或至少引用为表视图控制器类的实例变量可能很方便。这将帮助您轻松跟踪命中的addressField并获得正确的indexPath。