iphone tableview单元格与自定义textview - 获取textview参考

iphone tableview单元格与自定义textview - 获取textview参考

问题描述:

我有一个UITableView与15单元格,每个单元格中有一个单独的文本框。 我已经实现了UITextViewDelegate,并且能够使用textViewDidChange(etc)接收更改后的textview数据。但我仍然有一个大问题,我怎么知道哪个textview发送了这个(即哪个单元格被textview改变了?)iphone tableview单元格与自定义textview - 获取textview参考

它很有趣,有很多工作,但不知道它来自哪里。

如果需要,可以使用一大堆代码。

问候@norskben

代码

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 

     //Big Text Box 
     UITextView *detailLabel = [[UITextView alloc] initWithFrame:CGRectMake(30, 80, CONST_Cell_width, 150)]; 
     detailLabel.tag = 20; 
     [cell.contentView addSubview:detailLabel]; 

    } 


UITextView * detailLabel = (UITextView *) [cell.contentView viewWithTag:20]; 

您可以指定标签(整数),以不同的观点和查询标签号,查看查看调用的方法。寻找对视图标签属性:

tag 

The receiver’s tag, an integer that you can use to identify view objects in your application. 

@property(nonatomic) NSInteger tag 

see here

不是在我开发的机器,但是当你创建的UITextView你应该能够给它分配一个标签。我认为它是[myTextView setTag:x];其中x是一个整数。

然后,在TextViewDidChange使用 if (textview.tag == x) { //do something } else if (textview.tag == y) { //do something else and so on }

希望帮助一点点。

下面是一个重要的问题:您的文本框是静态的,还是可以随时间变化?如果它们不会改变(用户不能改变单元格数量或稍后添加更多),那么您可以为每个单元格声明一个新的textField。我的应用中有类似的东西。我有两个文本框,根据哪个textField当前处于活动状态,代表做了一些不同的事情。

中声明你的委托方法头

UITextField *textField1; 
UITextField *textField2; 
UITextField *textField3; 

单独的文本字段,请使用if语句块,找出哪些文本字段正在发生变化:

if (textField == textField1) { 
    //do something 
} else if (textField == myTextField2) { 
    //something else 
} 

注意,这真的只是工作,如果你的视图是静态的。

希望这有助于

有一个伟大的日子

+0

如果单元格被重用,该怎么办?原帖提到UITableView中有15个单元格。假设原始海报没有禁用单元重用,那么不能保证特定的UITextView总是与同一单元相关联。 – mmccomb 2010-02-22 21:23:17

+0

你说得对。您必须使用开关或if语句块将每个textField添加到单元格的contentView,明确选择哪个textField会进入单元格indexPath。 注意到当您将textField从屏幕上滚动时,textBox中的数据在单元重新加载时消失,这一点也很有趣。 – Justin 2010-02-22 21:26:20

文本的意见传递引用自己在每一个委托方法,让你知道哪个送的。为了连接到单元格,我将每个文本视图的tag属性设置为与其所在单元格的行对应的不同值。

当您在UITableView的单元格中搜索事件源UITextView只能遍历用户当前可以看到的单元格。这可以使用以下UITableView方法获得:

- (NSArray *)visibleCells