我使用故事板创建了一个静态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
}
}
这是正确的做法吗?如果是这样,我如何在这个单元格中找到文本字段?
谢谢!
答案 0 :(得分:2)
您可以使用indexPath
将inputView
的{{1}}属性设置为UITextField
,
此代码段可以帮助您......
UIDatePicker
答案 1 :(得分:1)
不,不是。如果您为每个单元格使用不同的重用标识符,则表格wiev将无法重新排列单元格,因此您将浪费内存。请改用tag
属性。
如果找到了单元格,则必须将文本字段作为属性添加到其中,这是访问它的最简洁方法。
答案 2 :(得分:0)
您知道Apple制作的示例代码名为 DateCell 吗?
代码就在这里,你可以运行它:
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.
}
这将为您提供更清洁,更好的设计。