2017-02-23 185 views
-1

У меня есть два tableViewControllers, второй tableViewController tableViewCell имеет textField и imageView, как я могу получить данные из этого textfield, когда я нажимаю navigationBarBackButton (Я хочу, чтобы хранить эти данные в первом tableViewController).Как вернуть данные текстового поля из tableViewCell в объекте c?

// 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); 

} 
+1

Использования делегату шаблона. – Sunny

+0

Вы можете использовать метод делегата или просто использовать NSUserdefaults. –

+0

вы можете использовать [NSNotificationCenter] (https://developer.apple.com/reference/foundation/nsnotificationcenter) и создать событие для отправки возвращаемого значения. –

ответ

0

Так много способов сделать это, но я предпочитаю этот путь

Сохранить значение textfield.text в NSUserDefaults как этот

[[NSUserDefaults standardUserDefaults] setObject:textField.text forKey:@"controllerTwo"]; 

И получить это значение в первом контроллере

NSString *secondContrllerText = [[NSUserDefaults standardUserDefaults] stringForKey:@"controllerTwo"]; 
+0

ОК, прежде чем устанавливать данные, сначала нужно получить данные из текстового поля na. Но почему они не получают данные из текстового поля? – Marking

+0

Как только, если данные поступают из текстового поля, мы можем присвоить эти данные либо строкам, либо naUserDefaults ..... – Marking

+0

Когда вы нажимаете на кнопку навигацииBarbackbutton, тогда попытайтесь получить текст текстового поля и назначьте userdefaults – Himanth

0

Вы можете напрямую добавлять ячейки в один массив и загружать ячейки из этого массива y, который вернет вам последнюю ячейку со всеми вашими изменениями.

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; 

} 
+0

Я не хочу возвращаться к ячейкам, я хочу только данные из ячейки ... – Marking

+0

Вы можете получить свои данные здесь. Установите тег Textfield как значение indexPath.row. Оттуда вы можете вернуться. –

0

здесь код я хотел бы передать данные с блокировки.Вотом является код хочет, чтобы помочь вам.

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 
+0

i ma с помощью контроллеров табличного вида, но u сказал о контроллерах ... ..... – Marking

+0

все то же! я просто покажу вам решение, если у каждого tableViewCell есть текстовое поле. правильная вещь - создать модель или NsMutableArray для хранения всех данных, а затем передать данные через блок в firstViewContoller. – user5055105

0

Либо вы можете использовать метод 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 
+0

ОК, но до этого я не могу получить данные из текстового поля ... – Marking

+0

если мы хотим хранить данные в NSUserDefaults, сначала нам нужно получить данные ... но это не придет ..... – Marking

+0

Да, у вас есть для первого сбора данных в NSUserdefaults. Если вы не получаете данные, чтобы вы не могли хранить данные по умолчанию. –

0

Установить тэг для TextField в tableViewCell

Затем цикл через клетку

для (int i = 0; i < [cellDataArray count]; я ++) {

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 

}

Надеется, что это помогает