Как передать значение в другой viewcontroller? - PullRequest
1 голос
/ 12 декабря 2011

Привет всем, у меня есть UITableView в UIViewController. При нажатии строки в таблице я собираю текстовое значение ячейки и помещаю его в строку с именем localstringGValue.

Я хочу передать эту строку и отобразить ее в другом, viewController, но без использования -pushViewController: я хочу, чтобы это значение было сохранено где-то вроде NSUserDefaults или NSDictonary, а затем на viewWillapper из другой контроллер представления Я хочу, чтобы это сохраненное значение отображалось в метке.

по моему .h:

 NSString *localStringGValue;

по моему .m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    localStringGValue = [tableView cellForRowAtIndexPath:indexPath].textLabel.text; 
}

в моем другом контроллере вида:

-(void)viewWillAppear
{
    label.text=localStringGValue;
}

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 12 декабря 2011

сохранить в nsuserdefaults:

[[NSUserDefaults standardUserDefaults] setObject:localstringGValue forKey:@"localstringGValue"];
[[NSUserDefaults standardUserDefaults] synchronize];

извлечь из nsuserdefaults:

NString *localstringGValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"localstringGValue"];
1 голос
/ 12 декабря 2011

Просто используйте delegate. Перед тем как нажать экземпляр «UploadViewController», вам нужно установить его delegate как self (в GoogleDocMainPageController.m). Каждый раз, когда ячейка таблицы выбирается, она устанавливает значение для self.delegate (это экземпляр GoogleDocMainPageController), отправляя метод self.delegate, который реализуется GoogleDocMainPageController:

[self.delegate setDataAfterSelectedTabelCell:[NSString stringWithFormat:@"TalbeCell %d selected", [indexPath row]]];

Основной код показан ниже:
UploadViewController.h:

#import <UIKit/UIKit.h>

@class UploadViewController;

@protocol UploadViewControllerDelegate <NSObject>

- (void)setDataAfterSelectedTabelCell:(NSString *)stringValueInCell;

@end

@interface UploadViewController : UITableViewController

@property (nonatomic, retain) id <UploadViewControllerDelegate> delegate;

@end

UploadViewController.m:

//...
@synthesize delegate = _delegate;

//...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.delegate setDataAfterSelectedTabelCell:[NSString stringWithFormat:@"TalbeCell %d selected", [indexPath row]]];
}

GoogleDocMainPageController.h:

#import <UIKit/UIKit.h>

#import "UploadViewController.h"

@class UploadViewController;

@interface GoogleDocMainPageController : UIViewController <UploadViewControllerDelegate>

- (void)loadUploadViewController;

@property (nonatomic, retain) UILabel * glLabel;
@property (nonatomic, retain) UploadViewController * uploadViewController;

@end

GoogleDocMainPageController.m:

//...
@synthesize glLabel = _glLabel;
@synthesize uploadViewController = _uploadViewController;

//...
- (void)viewDidLoad
{
    [super viewDidLoad];

    UIButton * uploadButton = [[UIButton alloc] initWithFrame:CGRectMake(10.0f, 160.0f, 300.0f, 35.0f)];
    [uploadButton setBackgroundColor:[UIColor blackColor]];
    [uploadButton setTitle:@"Upload Button" forState:UIControlStateNormal];
    [uploadButton addTarget:self action:@selector(loadUploadViewController) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:uploadButton];
    [uploadButton release];

    self.glLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 200.0f, 300.0f, 35.0f)];
    [self.glLabel setBackgroundColor:[UIColor blackColor]];
    [self.glLabel setTextColor:[UIColor whiteColor]];
    [self.glLabel setTextAlignment:UITextAlignmentCenter];
    [self.glLabel setText:@"Default"];
    [self.view addSubview:self.glLabel];

    self.uploadViewController = [[UploadViewController alloc] initWithStyle:UITableViewStylePlain];
}

//...
#pragma mark -

- (void)loadUploadViewController
{
    [self.uploadViewController setDelegate:self];
    [self.navigationController pushViewController:self.uploadViewController animated:YES];
}

#pragma mark - UploadViewControllerDelegate

- (void)setDataAfterSelectedTabelCell:(NSString *)stringValueInCell
{
    [self.glLabel setText:stringValueInCell];
}
0 голосов
/ 13 декабря 2011

Выполнить следующие шаги -

В первом ViewController -

  1. Создать объект второго ViewController, например SecondViewController * sec = [[SecondViewController alloc] init];sec.myLable = @ "My Lable String";

    Во втором ViewController -

  2. В .h файле UILable * myLable;

    @ property (неавтомический, сохранить) IBOutlet UILable * myLable;

    2.In .m файл @synthesize myLable;

0 голосов
/ 12 декабря 2011

Почему бы вам не объявить некоторые @property(nonatomic,retain) и @synthesize это? Тогда получатели / установщики будут созданы автоматически. В противном случае, определите некоторые методы получения / установки самостоятельно.

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