Как передать NSSString из RootViewController в другое представление? - PullRequest
0 голосов
/ 03 сентября 2011

Я кодирую приложение для iphone, которое принимает пользовательские входные данные из первого представления (RootViewController), а затем оно должно передать входные данные в «View» View Controller, который является другим представлением, которое использует входные данные для запроса к серверу., разобрать строку JSON и отобразить результаты в UITableView.Я застрял в том, как "отправить" эти строки (из пользовательского ввода на RootViewController) во 2-й ViewController ... Есть идеи?

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

Стефан

Ответы [ 3 ]

4 голосов
/ 03 сентября 2011

Есть три способа сделать это, в зависимости от того, как настроены представления.

Во-первых, вы можете использовать NSNotificationCenter, чтобы опубликовать уведомление о строке.Другое представление регистрируется в качестве наблюдателя для уведомления и может собирать информацию, когда оно публикуется.

Во-вторых, если контроллер второго представления представлен первым, т.е. вы выделяете / инициализируете VC и представляете егос помощью контроллера навигации вы можете создать свойство во втором VC и установить его из своего корня.В заголовке второго VC вы должны создать следующее:

NSString *someString;

и

@property (nonatomic, retain) NSString *someString;

затем @synthesize someString; в файле реализации.Это позволяет вам установить значение до того, как представление будет представлено.

Наконец, если представления не связаны, так как во втором VC не представлен корнем, вы создадите IBOutlet от корня довторой вк.Предполагая, что у вас настроен атрибут, как в предыдущем решении, вы должны вызывать что-то вроде self.secondVC.someString = myStringToPass;

Надеюсь, одна из этих подсказок

Редактировать: Понял, я закомментировал ссылкув NSNotificationCenter .... упс

2 голосов
/ 03 сентября 2011

Во втором контроллере представления создайте экземпляр NSString для получения значения и установите его, когда вы собираетесь показать этот контроллер, например, в методе tableView:didSelectRowAtIndexPath:.
RootViewController.h

@interface RootViewController : UITableViewController
{
    NSString *stringToPass;
}

@property (nonatomic, retain) NSString *stringToPass;

@end

RootViewController.m

#import "SecondViewController.h"

@implementation RootViewController

@synthesize stringToPass;

// Other code goes here...

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // for example first cell of first section
    if (indexPath.section == 0 && indexPath.row == 0)
    {
        SecondViewController *second = [[SecondViewController alloc] initWithStyle:UITableViewStyleGrouped];
        // here you pass the string
        second.receivedString = self.stringToPass;
        [self presentModalViewController:second animated:YES];
        [second release];
    }
}
@end

SecondViewController.h

@interface SecondViewController : UITableViewController
{
    NSString *receivedString;
}

@property (nonatomic, retain) NSString *receivedString;

@end

SecondViewController.m

@implementation SecondViewController

@synthesize receivedString;

// methods to use the string goes here

@end

Я не тестировал этот код ...Я написал, вспоминая это :)

1 голос
/ 03 сентября 2011

Создайте подкласс второго элемента управления view и напишите пользовательский метод init.

-(id)initWithMyCustomValueString:(NSString*)string;

И передайте ему свои данные.


Убедитесь, что вы создали iVar или свойство на своемsecondViewController для чтения данных из.

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