如何从目标c中的uitableViewCell取回文本字段数据?
Posted
技术标签:
【中文标题】如何从目标c中的uitableViewCell取回文本字段数据?【英文标题】:How to get back textfield data from tableViewCell in objective c? 【发布时间】:2017-02-23 10:48:00 【问题描述】:我有两个tableViewControllers
,第二个tableViewController tableViewCell 有textField
和imageView
,当我单击navigationBarBackButton
时,如何从textfield
获取数据(我想将该数据存储在第一个tableViewController
)。
// code from second tableViewController...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if (indexPath.row == 0)
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cellID"];
cell.textLabel.text = @"SIM Name";
cell.detailTextLabel.text = @"AirTel";
cell.imageView.image = [UIImage imageNamed:@"Star2.png"];
return cell;
TableViewCell1 *cell1 = [tableView dequeueReusableCellWithIdentifier:@"cell1"];
cell1.nameTextField.delegate = self;
if (indexPath.row == 1)
NSArray *cell1XibRef = [[NSBundle mainBundle]loadNibNamed:@"TableViewCell1" owner:self options:nil];
cell1 = [cell1XibRef objectAtIndex:0];
cell1.imageView.image = [UIImage imageNamed:@"Con.png"];
self.nameString = cell1.nameTextField.text;
return cell1;
return nil;
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
return YES;
- (void)textFieldDidBeginEditing:(UITextField *)textField
//Whenever people start editing your textfield
self.nameString = textField.text;
NSLog(@"%@", self.nameString);
【问题讨论】:
使用委托模式。 您可以使用委托方法,也可以简单地使用 NSUserdefaults。 您可以使用NSNotificationCenter 并创建一个事件来发回您想要的值。 当我点击后退按钮时,它没有从文本字段中获取数据...... self.nameString = cell1.nameTextField.text; 【参考方案1】:有很多方法可以做到这一点,但我更喜欢这种方式
像这样将textfield.text
的值保存在NSUserDefaults
中
[[NSUserDefaults standardUserDefaults] setObject:textField.text forKey:@"controllerTwo"];
并在第一个控制器中获取该值
NSString *secondContrllerText = [[NSUserDefaults standardUserDefaults] stringForKey:@"controllerTwo"];
【讨论】:
好的,在设置数据之前,首先需要从文本字段中获取数据。但它没有从文本字段中获取数据,为什么? 一旦数据来自文本字段,我们只能将该数据分配给字符串或 naUserDefaults..... 当您点击 navigationBarback 按钮时,尝试获取文本字段文本并分配给 userdefaults 尝试将标签设置为文本字段并根据该标签获取数据 self.nameString = cell1.nameTextField.text; NSLog(@"%@", self.nameString);我写了这两行,但它打印任何东西......【参考方案2】:您可以直接在一个数组中添加单元格并从该数组中加载单元格,这将返回包含所有编辑的最新单元格。
NSMutableArray *arrCells = [[NSMutableArray alloc] init];
for (init i=0; i<20; i++)
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cellID"];
arrCells = cell;
在 cellForRowAtIndexPath 方法中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = arrCell[indexPath.row];
......
return cell;
【讨论】:
您可以从这里取回您的数据。将 Textfield 标记设置为 indexPath.row 值。从那里你可以回来。【参考方案3】:这是我喜欢用块传递数据的代码。这是希望帮助你的代码。
FirstViewController.h
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController
@end
FirstViewController.m
#import "FirstViewController.h"
#import "ViewController.h"
@interface FirstViewController ()
@end
@implementation FirstViewController
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
- (void)buttonClick
ViewController *controller = [[ViewController alloc] init];
controller.passTheTextFieldData = ^(NSString *textValue)
NSLog(@"show the %@ textValue",textValue);
;
[self.navigationController pushViewController:controller animated:YES];
@end
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (nonatomic, strong) void (^passTheTextFieldData)();
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()<UITextFieldDelegate>
@property (nonatomic, strong) UITextField *textField;
@property (nonatomic, strong) NSString *textValue;
@end
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
self.textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.textField addTarget:self action:@selector(textFieldValueChanged) forControlEvents:UIControlEventValueChanged];
- (void)textFieldValueChanged
self.textValue = self.textField.text;
- (void)navigationbarBackClick
if (self.passTheTextFieldData)
self.passTheTextFieldData(self.textValue);
@end
【讨论】:
也一样!我只是向您展示解决方案,如果您每个 tableViewCell 都有一个文本字段。正确的做法是创建一个模型或 NsMutableArray 来存储所有数据,然后将数据通过块传递给 firstViewContoller。【参考方案4】:设置tableViewCell中textField的tag属性
然后循环遍历单元格
for (int i = 0 ; i
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
UITextField *txtfield = [[cell contentView]viewWithTag:2];
//now get the text txtfield.text
希望对你有帮助
【讨论】:
【参考方案5】:您可以使用delegate
方法来存储您的值或使用NSUserdefaults
。但是您必须存储一个值才能将其传递给另一个表视图,我建议您使用NSUserdefaults
。
//假设你必须保存文本(获取你的数据)
NSString *valueToSave = cell1.nameTextField.text;
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"keyAbcd"];
[[NSUserDefaults standardUserDefaults] synchronize];
//要显示数据的另一个页面(粘贴数据)
NSString *savedValue = [[NSUserDefaults standardUserDefaults]
stringForKey:@"keyAbcd"];//your key have to be same
//print save value in nslog
【讨论】:
如果我们想先将数据存储在 NSUserDefaults 中,我们需要获取数据……但它不会来…… 是的,您必须先获取数据才能将数据存储在 NSUserdefaults 中。如果您没有获得数据,那么您将无法在默认值中存储数据。 存储数据 NSString *valueToSave = cell1.nameTextField.text; [[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"keyabcd"]; [[NSUserDefaults standardUserDefaults] 同步]; NSString *savedValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"keyabcd"]; //打印保存的值以上是关于如何从目标c中的uitableViewCell取回文本字段数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UITableViewCell 中垂直居中对齐 UIButton? (目标 C)
如何在 Swift 中的 UITableViewCell 上添加带有单击事件的按钮?