Передача параметра из представления обратно в ячейку другого представления UITableView - PullRequest
1 голос
/ 11 мая 2011

у меня два взгляда. Первый: FirstViewController Второе: SecondViewController

FirstViewController является моим UINavigationController корневым контроллером и внутри FirstViewController У меня есть UITableView. При щелчке по ячейке в UITableView представление переходит к SecondViewController . Внутри SecondViewController У меня есть UILabel. Я хочу присвоить значение этого UILabel ячейке, которая нажимается в FirstViewController при нажатии кнопки Назад на панели навигации . Что я должен сделать, чтобы реализовать это?

Я могу передать значение SecondViewController из FirstViewController, создав:

SecondViewController * sv; sv.somestring = someanotherstring;

но не может реализовать это в SecondViewController для передачи значения NSString в FirstViewController.

Можете ли вы помочь мне, пожалуйста?

Спасибо. ае

Ответы [ 3 ]

7 голосов
/ 11 мая 2011

Типичный способ справиться с этим в iPhone SDK - определить протокол делегата. Например:

@protocol SecondViewControllerDelegate
- (void) viewControllerWillDisappearWithLabelText: (NSString*)text;
@end

Тогда вы добавите delegate свойство к вашему SecondViewController, например:

//in the .h file
@interface SecondViewController : UIViewController {
    //declare instance variables
}
@property(nonatomic, assign) id<SecondViewControllerDelegate> delegate;
@end

//in the .m file
@implementation SecondViewController

@synthesize delegate;

//[code...]
@end

Затем вы обновите FirstViewController для реализации протокола делегата:

//in the .h file
@interface FirstViewController : UIViewController<SecondViewControllerDelegate> {
    //[instance variables]
}
//[methods and properties]
@end

//in the .m file
@implementation FirstViewController
//[code...]

- (void) viewControllerWillDisappearWithLabelText: (NSString*)text {
    //do whatever you need to do with the text
}

//[code...]
@end

... и установить поле делегата, когда FirstViewController создает SecondViewController:

SecondViewController* sv = [[SecondViewController alloc] init]; 
sv.somestring = someanotherstring;
sv.delegate = self;

Наконец, в SecondViewController вы реализуете viewWillDisappear примерно так:

- (void) viewWillDisappear: (bool)animated {
    [super viewWillDisappear:animated];
    if (self.delegate) {
        [self.delegate viewControllerWillDisappearWithLabelText: myLabel.text];
    }
}
0 голосов
/ 11 мая 2011

Да, есть очень простой способ справиться с этим .....

Вы можете взять глобальную переменную

В вашем Delegate.h файле объявите вашу переменную:

@interface Smoke_ApplicationAppDelegate : NSObject {

  UIWindow *window;
  UINavigationController *navigationController;
  NSString *messageString;  //This would be your String Variable
}
 @property(nonatomic,retain)NSString *messageString;

Второе в Delegate.m file

@implementation Smoke_ApplicationAppDelegate

@synthesize window; 
@synthesize navigationController; 
@synthesize messageString; // Synthesize it over here..

Это Готово. Теперь вы можете использовать эту строковую переменную во всех / любых классах, которые вы хотите ..

Чтобы использовать эту глобальную переменную.

Просто импортируйте ваш файл Делегата, сделайте объект из него ....

import "DelegateFile.h"

@implementation About

DelegateFile *appDel;

Теперь в вашем классе.

-(void)viewDidLoad { [super viewDidLoad];

appDel=[[UIApplication sharedApplication]delegate];

}

Теперь вы можете получить к нему доступ в любом месте вашего класса с помощью этого объекта:

appDel.messageString

Просто следуйте моим шагам. Осторожно, я уверен, что это определенно вам поможет .....

легкой жизни,

0 голосов
/ 11 мая 2011

Объявите строку (stringVal) в appdeleage и установите ее свойство как неатомическое и сохраните, также синтезируйте его. Во втором контроллере представления вы можете установить значение метки для строки appdelegate ([appdelegate setStringVal: label.text]; ). Вы можете получить это значение в первом контроллере представления и использовать его в таблице (NSString * localString = appdelegate.stringVal];).

Всего наилучшего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...