2013-03-17 3 views
3

У меня есть два вопроса.Передача данных между двумя различными раскадными файлами

Первый вопрос:

В моем проекте у меня есть два разных раскадровки файла: A storyboard и B storyboard.

Я хочу передать данные (nsstring) от (A) controller of (A) storyboard до (B) controller of (B) storyboard

, как я это сделать?

второй вопрос:

во втором раскадровке я два контроллера прикован с Segue

, когда я называю SEGUE в коде с этой инструкцией:

[self.navigation controller performSegueWithIdentifier: @"secondViewSegue" sender:self]; 

У меня есть сообщение: "has no segue with identifier 'secondViewSegue' "

Почему?

+0

Два раскадровки? Помимо наличия отдельных раскадровки для разных размеров экрана iPad против iPhone, какое практическое применение было бы иметь отдельные раскадровки на одной архитектуре? Возможно ли это? Если вам нужна гибкость в пользовательском интерфейсе, почему бы не использовать XIB? –

+0

@MichaelDautermann несколько раскадровки полностью поддерживаются. Хотя исходный раскадровки загружен по умолчанию, любой другой может быть загружен по мере необходимости. Существуют жизнеспособные варианты использования. – GoZoner

ответ

3

1/Хороший способ сделать это - создать отдельный объект модели, который можно одинаково адресовать из обоих мест. И самый простой способ сделать что это добавить свойство к @interface части файла AppDelegate.h, например

@property (nonatomic, strong) NSString* sharedString; 

Чтобы установить и получить его, вам нужно добавить набранный доступ к AppDelegate в любом файле, это нужно:

#include AppDelegate.h 

Затем вы можете использовать ...

AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 

    //to set (eg in A controller) 
    appDelegate.sharedString = string; 

    //to get (eg in B controller) 
    NSString* string = appDelegate.sharedString; 

в качестве альтернативы собственности, вы может использовать статическую переменную в файле заголовка:

static NSString* staticString; 

Какой бы быть доступным для любого объекта, который #imports заголовочный файл. На самом деле это не Objective-C.

Для более сложных случаев вы можете создать одноэлементный объект для доступа к данным модели.

2/Try:

[self performSegueWithIdentifier: @"secondViewSegue" sender:self]; 

Убедитесь, что Segue подключен от вашего ViewController, не это Навигационный контроллер.

+0

для первого вопроса, который вы, вероятно, правы, единственным решением является обмен переменной в AppDelegate. для второго вопроса ok, я решил спасибо – giorgio83

+0

отлично поработал – Ronaldoh1

1

Существуют различные способы передачи данных между двумя различными контроллерами в разных раскадровках.Что я использую, я хотел бы поделиться

Swift 3

let storyboard = UIStoryboard(name: "StoryboardName2", bundle: nil) 
    let controller :NextViewController = storyboard.instantiateViewController(withIdentifier: "NextVCIdentifier") as! NextViewController 
    controller.NameofUser = Self.SelectedUser 

переменную Declare в следующем ViewController, как

public var NameofUser:String = "" 
Смежные вопросы