为啥来自 customTableViewCell 的 UiTextField 没有在我的 UiViewController 中使用 UITableView 返回字符串

Posted

技术标签:

【中文标题】为啥来自 customTableViewCell 的 UiTextField 没有在我的 UiViewController 中使用 UITableView 返回字符串【英文标题】:Why UiTextField from customTableViewCell not returning string in my UiViewController with UITableView为什么来自 customTableViewCell 的 UiTextField 没有在我的 UiViewController 中使用 UITableView 返回字符串 【发布时间】:2015-11-11 06:01:27 【问题描述】:

我的项目有一个带有 UIImage 和 UITextField 的自定义 UITableViewCell。

在带有 UITableView 的视图控制器中,我可以使用数据源和委托协议从 ViewController UITableView 访问和设置 customCell 属性。 问题是当想要使用 textFieldShouldReturn 方法 NSLog UITextField 文本时。 下面是我在 viewController 中的 tableview 的代码和快照。

CustomModalTableViewCell

#import <UIKit/UIKit.h>

@interface CustomModalTableViewCell : UITableViewCell
@property (strong, nonatomic) IBOutlet UITextField *customCellTextField;
@property (strong, nonatomic) IBOutlet UIImageView *customCellImageView;
@end

ModalViewController.h

  #import <UIKit/UIKit.h>

@interface ModalViewController : UIViewController<UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate>

@end

ModalViewController.m

#import "ModalViewController.h"
#import "CustomModalTableViewCell.h"
#import "MYImageClass"

@interface ModalViewController ()
    CustomModalTableViewCell *customCell;
    NSString *bookFieldString;


@property (strong, nonatomic) IBOutlet UITableView *modalTable;
@end

@implementation ModalViewController

-(BOOL)textFieldShouldReturn:(UITextField *)textField
    NSLog(@"book textFiled value is %@", customCell.customCellTextField.text);

    return YES;


- (void)viewDidLoad 
    [super viewDidLoad];
    customCell.customCellTextField.delegate = self;
    self.modalTable.delegate = self;
    self.modalTable.dataSource = self;
  

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    return 2;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

    if (section == 0) 
        return  2;
    else
        return 1;
    
    return 0;


-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 

    return 20;

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
    if (section == 0) 
         return @"Book Details";
    else if (section == 1)
         return @"Reading Details";
    
    return @"ok";




-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    CustomModalTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"customCellForModal"];
    if (!cell) 
        [tableView registerNib:[UINib nibWithNibName:@"customModalTableViewCell" bundle:nil] forCellReuseIdentifier:@"customCellForModal"];
        cell = [tableView dequeueReusableCellWithIdentifier:@"customCellForModal"];
    
    if (indexPath.section == 0) 
        if (indexPath.row == 0) 
            cell.customCellImageView.image = [MYImageClass imageOfBookIcon];
            cell.customCellTextField.placeholder = @"Enter book name here";

        if (indexPath.row == 1) 
            cell.customCellImageView.image = [MYImageClas imageOfAuthorIcon];
            cell.customCellTextField.placeholder = @"Enter author name here";
        
    else if (indexPath.section == 1)
        if (indexPath.row == 0) 
            cell.customCellImageView.image = [MYImageClas imageOfTotalPageIcon];
            cell.customCellTextField.placeholder = @"Enter total page here";
        
    

       return cell;



@end

【问题讨论】:

将此行添加到cellForRowAtIndexPath: cell.customCellTextField.delegate = self; 在文本字段委托中,删除您现有的代码,只需添加这一NSLog(@"book textFiled value is %@", textField.text); 另外,为什么要使用全局单元格实例?您没有使用它来填充 tableView 感谢您的及时回复,我在 viewDidLoad 中设置了 textField 委托。你的回答确实有效。 响应您的进一步请求(您显然已将其删除),在您为文本字段设置占位符文本的条件下更改键盘类型。像这样。 paste.ubuntu.com/13225287 用户仍然可以将复制的字符串粘贴到仅限数字的 UITextField 中。我确实必须使用标签属性来使其成为第一响应者。 您可以像 ***.com/questions/6701019/… 这样禁用在文本字段中的粘贴。但是是的,您也可以将文本字段的标签设置为 indexPath.section 并使用这些标签在返回之前分析字符串,因此基于该标签拒绝/接受输入 【参考方案1】:

您的代码的问题是,您对委托和表格视图的概念感到困惑。

一个。首先摆脱名为customCell 的全局变量。你不需要那个,你也没有使用那个。

b。在您的 cellForRowAtIndexPath 方法中,在声明单元格后键入此行。

cell.customCellTextField.delegate = self;

c。将您的 textField 委托方法 textFieldShouldReturn 替换为:

-(BOOL)textFieldShouldReturn:(UITextField *)textField

   NSLog(@"book textFiled value is %@", textField.text);

   return YES;

【讨论】:

以上是关于为啥来自 customTableViewCell 的 UiTextField 没有在我的 UiViewController 中使用 UITableView 返回字符串的主要内容,如果未能解决你的问题,请参考以下文章

未设置 CustomTableViewCell 属性(它们为零)

使用 nib 的多个 customTableViewCell

在 customtableviewcell 中加载并设置其 IBOUTLETS 时请求成员错误

为啥我的 UISearchDisplayController 不使用我的自定义 tableViewCell?

Swift:来自 XIB 文件的多个自定义 TableViewCell

为啥我的图像没有像我指定的那样显示图像 - 在 Swift 中