【问题标题】:Empty String from Text Field In Custom UITableViewCell Class IOS自定义 UITableViewCell 类 IOS 中文本字段中的空字符串
【发布时间】:2020-11-12 07:47:25
【问题描述】:

我为 UITableViewCell 创建了一个自定义类。 UITableViewCell 是故事板中的一个动态原型单元。我试图从我的主视图控制器中的 textfield.text 引用字符串。我在主视图控制器中的代码为 textfield.text 字符串返回 nil。我知道对单元格的引用是正确的,因为它会自动填充 textfield.text,但仍然返回 nil。请帮忙。

class AddMyLayerTitleCell: UITableViewCell, UITextFieldDelegate {

@IBOutlet weak var addMyLayerTitleTF: UITextField!


override func awakeFromNib() {
    super.awakeFromNib()
    
    self.addMyLayerTitleTF.becomeFirstResponder()
    self.addMyLayerTitleTF.delegate = self
    
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {   //delegate method
  textField.resignFirstResponder()

    // This works
    print("text field text = \(addMyLayerTitleTF.text!)")

    return true
}  
}

MainViewController.m  - (objective-c)

- (IBAction)addMyLayerSaveButton:(id)sender {

    AddMyLayerTitleCell *cell = [self.gisTableView dequeueReusableCellWithIdentifier:@"AddTitleCell"];
    NSString *myLayerString = cell.addMyLayerTitleTF.text;

    // Returns nil
    NSLog(@"myLayerString = %@", myLayerString);
    NSLog(@"myLayerString = %@", cell.addMyLayerTitleTF.text);
   

}

【问题讨论】:

  • 嘿,您的“AddMyLayerTitleCell”在 Swift 中,您正在尝试将它们用于 Objective-C 类。
  • 是的,没错。我认为它应该仍然有效,但可能是错误的。你认为这是问题所在吗?
  • 当然,使用单一语言。
  • 我删除了我的答案,因为原因是别的。该代码无法工作,因为dequeueReusableCellWithIdentifier 只能在cellForRowAtIndexPath 中使用。
  • 好的,瓦迪安。我会尽量使用单一语言,Ashutosh。

标签: ios objective-c swift uitextfield


【解决方案1】:

问题是我必须删除按钮中的AddMyLayerTitleCell *cell = [self.gisTableView dequeueReusableCellWithIdentifier:@"AddTitleCell"]; 行。这在我从它请求文本字段字符串之前创建了一个新的单元格实例,因此在我获取它时新单元格的文本字段中将没有任何内容。我还必须在类外声明AddMyLayerTitleCell *cell;,以便可以从按钮中引用现有单元格。

class AddMyLayerTitleCell: UITableViewCell, UITextFieldDelegate {

@IBOutlet weak var addMyLayerTitleTF: UITextField!

    override func awakeFromNib() {
    super.awakeFromNib()

    self.addMyLayerTitleTF.becomeFirstResponder()
    self.addMyLayerTitleTF.delegate = self

}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {   //delegate  method
 textField.resignFirstResponder()

    // This works
    print("text field text = \(addMyLayerTitleTF.text!)")

    return true
}

}


// MainViewController.m  - (objective-c)

AddMyLayerTitleCell *cell;

@interface MainViewController ()


- (IBAction)addMyLayerSaveButton:(id)sender {
    
    NSString *myLayerString = cell.addMyLayerTitleTF.text;

    // Works
    NSLog(@"myLayerString = %@", myLayerString);
    NSLog(@"myLayerString = %@", cell.addMyLayerTitleTF.text);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多