如何从UITableViewCell获取对UITextField的引用?

时间:2012-08-01 22:42:07

标签: iphone objective-c cocoa-touch

我使用故事板创建了一个静态UITableView。表视图中的每一行都包含一个文本字段,并且每行都给出了一个标识符。其中一个文本字段用于输入日期。我想在选择此文本字段时显示UIDatePicker。我试图将文本字段的inputview设置为UIDatePicker来完成此任务。我正在努力在这个特定的UITableViewCell上获得UITextField。所以这就是我要走的方向:

  -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    const NSString *birthDateCellIdentifier = @"BirthDateCell";
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString * cellIdentifier = [cell reuseIdentifier];
    if(cellIdentifier isEqualToString:birthDateCellIdentifier){
        /*this is the cell we're after so get pointer to cell's textfield*/
        //set textfield's inputview to UIDatePicker

    }


}

这是正确的做法吗?如果是这样,我如何在这个单元格中找到文本字段?

谢谢!

4 个答案:

答案 0 :(得分:2)

您可以使用indexPathinputView的{​​{1}}属性设置为UITextField

此代码段可以帮助您......

UIDatePicker

答案 1 :(得分:1)

不,不是。如果您为每个单元格使用不同的重用标识符,则表格wiev将无法重新排列单元格,因此您将浪费内存。请改用tag属性。

如果找到了单元格,则必须将文本字段作为属性添加到其中,这是访问它的最简洁方法。

答案 2 :(得分:0)

您知道Apple制作的示例代码名为 DateCell 吗?

image0

image1

image2

代码就在这里,你可以运行它:

http://developer.apple.com/library/ios/#samplecode/DateCell/Introduction/Intro.html

答案 3 :(得分:0)

您是否考虑过UITableView对这个特定问题的选择不佳?

想一想 - 这些“单元”中的每一个看起来和行为看起来都不同并且实现了不同的目的,并且有一定数量的它们不需要动态数据绑定。

如果我是你,我只会为每个输入字段制作自定义视图,并在UIScrollView中填充整个视图。

即使你坚持这种方法,也存在问题。 UITableViewCells没有UITextField属性,因此您将无法访问它们。做一个这样的课:

@interface DatePickerView : UIView <UITextFieldDelegate>

@property (nonatomic, retain) UITextField *textField;
@property (nonatomic, retain) UIDatePicker *datePicker;

@end

现在所有逻辑都包含在DatePickerView类中。您可以实现UITextFieldDelegate方法来处理输入,而不必担心您选择了哪个文本字段。在DatePickerView的实现中,您可以执行以下操作:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    // Show the UIDatePicker.
}

这将为您提供更清洁,更好的设计。