2015-02-27 6 views
0

Я хотел бы иметь приложение с вкладками, где одна страница зарезервирована для информации об отладке. Итак, на этой странице у меня есть текстовое представление. Я хотел бы, чтобы другие контроллеры представлений и singleton (доступ к данным и т. Д.) Могли добавлять в текстовую область. Я пробовал шаблон singleton здесь, но я думаю, что это не работает, потому что экземпляр singleton не совпадает с «реальным», который использует приложение. Есть ли способ получить доступ к фактическому экземпляру из другого ViewController или из других классов в приложении?Swift: доступ к другому полю ViewController

Вот DebugViewController:

class DebugViewController : UIViewController { 

@IBOutlet weak var debugTextField: UITextView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    debugTextField.text = "" 
} 

func debug(text : String) { 
    if debugTextField == nil { 
     debugTextField = UITextView() 
     debugTextField.text = "" 
    } 
    println("\(NSDate()) : \(text)") 
    debugTextField.text = "\(NSDate()) : \(text) \n" + debugTextField.text 
} 

} 

ответ

0

одноплодной будет работать, но вы не можете связать его с IB. Вам необходимо создать его программно в AppDelegate.

Другая идея состоит в том, чтобы просто разместить ссылку на ваш DebugViewController внутри этих классов, где это необходимо, как

var sharedDebugViewController: DebugViewController! 

и инициализировать их от вас AppDelegate.

+0

Это будет работать, но я не должен быть инициализацией ViewController сам. Это (я думаю), почему мой общий синглтон не работал - это был не тот пример, который использовал приложение. Так что все, что мне нужно, чтобы сделать эту работу, - это код для захвата фактического экземпляра. –

+0

Если вы хотите использовать одноэлементный шаблон, тогда у вас нет другого выбора, так как IB создаст экземпляр через 'init' и никогда не будет с помощью некоторого' Class.sharedInstance' –

0

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

вы можете сделать это с глобальным классом так создать, как

class GlobalVariables : NSObject { 

    var variableOne : String = String() 

} 
var global = GlobalVariables() 

теперь, когда вы получаете сообщение, сделайте это как global.variableOne = your message . Вы установили переменную в глобальный класс, вы можете получить доступ к этой переменной в своем приложении, где хотите. на другой контроллер viewdidload использования в качестве

debugTextView.text = global.variableOne 
+0

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

+0

проверить, теперь ли это хорошо ... это да или нет, скажите –

+0

, когда вы получите сообщение, сохраните его в глобальной переменной и назначьте глобальную переменную этому ui на viewdidload, когда вы будете перемещаться туда в любое время, когда он будет всегда там –

Смежные вопросы