为啥来自 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?