为啥当我单击目标 c 中的按钮时未从 tableViewCell 获取文本字段数据?

Posted

技术标签:

【中文标题】为啥当我单击目标 c 中的按钮时未从 tableViewCell 获取文本字段数据?【英文标题】:Why textfield data not fetched from tableViewCell when i click button in objective c?为什么当我单击目标 c 中的按钮时未从 tableViewCell 获取文本字段数据? 【发布时间】:2017-02-23 14:34:12 【问题描述】:

如果我点击按钮 NSLog 显示 NULL 值,它没有从文本字段中获取数据,为什么?........

委托方法正常工作......

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
  UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cellID"];
  if (indexPath.row == 0) 
    self.nameTextField = [[UITextField alloc]init];
    self.nameTextField.frame =CGRectMake(25, 0, 300, 50);
    self.nameTextField.placeholder = @"Name";
    self.nameTextField.keyboardType = UIKeyboardTypeAlphabet;
    [cell addSubview:self.nameTextField];
    self.nameTextField.delegate = self;

  return cell;
 
  if (indexPath.row == 1) 

    self.button = [UIButton buttonWithType:UIButtonTypeSystem];
    self.button.frame = CGRectMake(100, 10, 135, 50);
    [self.button setTitle:@"StoreData" forState:UIControlStateNormal];
    [self.button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [cell addSubview:self.button];

    return cell;
  

 return nil;


-(void)buttonClicked:(id) sender 

  if (sender == self.phoneTextField) 

    self.nameString = self.nameTextField.text;
  

  NSLog(@"Name : %@", self.nameString);

【问题讨论】:

按钮点击时是否进入 if 语句? 是的,它正在打印 OutPut: Name : (null) 这里的 sender 是按钮,所以它永远不会进入条件 sender = self.button 你在哪里声明phoneTextField?看起来代码永远不会到达 if 内部(在buttonClicked: 中)。另请注意,您总是在初始化新单元格(以及初始化和重新分配 self.nameTextFieldself.button),即使您只是滚动表格(cellForRowAtIndexPath: 可以 - 通常是 - 调用多次)。 为什么 sender=self.phoneTextField 里面怎么回事??有标签值吗?如果是,sender.tag 在哪里?? 【参考方案1】:

action function 中的parameter 是按钮而不是textField

-(void)buttonClicked:(id) sender 
    if (sender == self.button) 
        self.nameString = self.nameTextField.text;
      
  NSLog(@"Name : %@", self.nameString);

【讨论】:

是的,它正在工作......但它打印的输出:名称:外部名称: 它没有打印数据 为什么打印空输出? 因为 self.nameTextField.text 是空字符串 if (indexPath.row == 0) self.nameTextField = [[UITextField alloc]init]; self.nameTextField.frame =CGRectMake(25, 0, 300, 50); self.nameTextField.placeholder = @"Name"; self.nameTextField.keyboardType = UIKeyboardTypeAlphabet; [cell addSubview:self.nameTextField]; self.nameTextField.delegate = self; return cell; 你没有在这里设置 self.nameTextField.text 你只是设置占位符

以上是关于为啥当我单击目标 c 中的按钮时未从 tableViewCell 获取文本字段数据?的主要内容,如果未能解决你的问题,请参考以下文章

按下按钮时未从数组中填充 UILabel

当我单击目标 C 中的一个按钮(添加按钮)时,如何创建一组按钮?

单击按钮时未发送 Django Post 请求

调用 Selector 方法时未从 Superview 中删除视图

为啥单击属性时未显示文档,但显示在窗口中

当我单击 bms_homepage.html 中的登录按钮时,为啥“找不到页面”?