我有一个UITableViewCell
的自定义UITextField
(链接到自定义单元格类)。我正在尝试从我的VC类访问textField
。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
menuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
if ([indexpath row] == 2) {
menuCell.nameTextField.delegate = self;
}
return cell;
}
-(void) textFieldDidEndEditing:(UITextField*) textfield
{
}
如何从textFields
获取textFieldDidEndEditing
文字?
答案 0 :(得分:1)
根据您要访问的位置,此文本取决于其难度。
想要访问cellForRowAtIndex中的文字 - (非常简单)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
menuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
if ([indexpath row] == 2) {
menuCell.nameTextField.delegate = self;
}
NSString * text = menuCell.nameTextField.text;
return cell;
如果你想在VC中的任何地方访问文本,而menuCell是唯一的(只有其中一个) - (中等难度)
在您的标题文件中,将自定义单元格添加为类
@class menuCell;
这意味着您可以在界面中将其设置为变量
menuCell * _menuCell;
在cellForRowAtIndex中接下来要分配此自定义单元格
- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == bCustomCellSection) {
if (!_menuCell) {
_menuCell = [tableView_ dequeueReusableCellWithIdentifier:bProfileNameCell];
_menuCell.nameTextField.delegate = self;
}
_menuCell.nameTextField.placeholder = @"Name";
_menuCell.selectionStyle = UITableViewCellSelectionStyleNone;
return _menuCell;
}
...
}
这意味着我们现在可以从VC中的任何位置访问菜单单元格,并可以通过调用
来获取文本_menuCell.nameTextField.text
我从来没有这样做,但可能会采取两种方式之一
a)创建一个数组,当我们创建自定义单元格时,每次都会向textFields添加一个指向数组的指针。然后我们可以从该数组中访问我们想要的textField
对于这个方法,我会将自定义单元格添加到接口
中定义的可变数组中NSMutableArray * cellsArray;
记得在viewDidLoad
中初始化它cellsArray = [NSMutableArray new];
然后在cellForRowAtIndex中我会每次添加单元格
menuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
[cellsArray addObject: menuCell];
这显然取决于我们有多少部分。如果我们有多个部分,它会再次变得更复杂:
然后我们需要为每个部分添加一个数组到整个数组。这是非常复杂的,可能有一个完整的问题,有一个如何做到这一点的良好链接here:
一旦你有一个单元格数组(或一组单元格数组),你可以根据indexPath调用你想要的单元格并得到textField
b)调用指向我们想要的特定单元格的指针
menuCell * menuCell = [self tableView:table cellForRowAtIndexPath:indexPath];
然后像我们之前那样从这个单元格中获取textField。
如果你想在cellForRow之外创建一个,你可以计算你自己的indexPath:
NSIndexPath * indexPath = [self.tableView indexPathForCell:cell];
如果您想要访问特定的单元格,但是如果您想要访问它并且不得不在整个VC上调用此代码,那么此方法非常好用
希望这有帮助
答案 1 :(得分:0)
如果您询问如何从委托方法textFieldDidEndEditing获取文本,那么您只需执行此操作:
-(void) textFieldDidEndEditing:(UITextField*) textfield
{
NSString *textFieldText = textfield.text;
}
但是,如果您有多个textField并且想要知道调用该委托的文本字段,则可以标记textField:
[myTextField setTag:indexPath.row]
然后将if语句放在委托textFieldDidEndEditing中,如下所示:
-(void) textFieldDidEndEditing:(UITextField*) textfield
{
if(textfield.tag == index0) do something..
else if(textfield.tag == index1) do something..
}