2016-11-15 2 views
0

Поскольку я новичок и новичок на Swift может кто-нибудь сказать мне, как я могу получить значение метки на экране 1, чтобы показать на экране 2. БлагодаряПоказать Ярлык Значение на 2-View - Swift

enter image description here

Редактировать: Итак, я попробовал, как вы мне сказали, но по какой-то причине текст метки не изменился в View 2. Любая помощь? Благодаря

enter image description here

enter image description here

+0

Возможный дубликат [Как вы обмена данными между контроллерами зрения и другими объектами Swift?] (HTTP: // stackoverflow.com/questions/29734954/how-do-you-share-data-between-view-controllers-and-other-objects-in-swift) – pableiros

+0

По-прежнему вы не присвоили значение в VIEW2. В vc2 внутри вашего viewDidLoad попробуйте. Number1V2.text = labelNumber1 – Joe

ответ

1

Передаю textFiled данные в destViewController, чтобы показать, как выполняется segue при передаче данных.

Примечание: Если вы хотите передать строку данных на destVC .Вы можете присвоить строку как var someValue: String

mainStoryBoard:

enter image description here

MainVC:

@IBOutlet weak var textField: UITextField! 
    //or you can assign string like var someValue: : String 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     let viewController = segue.destination as! destVC 
     viewController.dataText = textField.text // someValue.text 
    } 

DestVC:

@IBOutlet var label: UILabel! 

var dataText = String() 
override func viewDidLoad()  
label.text = dataText     
} 

Выход:

enter image description here

+0

Только что отредактировал мой вопрос –

1

Я буду считать вас есть ViewController класс VC1 (экран 1) & ViewController класс VC2 (экран 2). Я вижу на скриншоте, что вы уже используете segue для перехода от просмотра VC1 к VC2.

Теперь, объявить переменную в классе VC2 давайте назовем его labelValue,

class VC2 { 

    var labelValue: String? 

... 

} 

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

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 

будет вызван, если он переопределен в классе viewController source (scene1 в вашем случае). В этом методе вы сможете получить доступ к контроллеру представления назначения (сцена 2) и его свойствам. Так что для вашего дела вы можете реализовать его, как это,

class VC1 { 

//I have assumed the below label will hold the value which you want to pass it to the scene 2. 
var lblResult: UILabel! 
...... 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

// You can access the VC2 instance from the segue 
    if let vc2 = segue.destinationViewController as? VC2 { 

    vc2.labelValue = lblResult.text 

    } 

} 

Теперь, как только вы реализуете prepareForSegue: метод правильно, как показано выше, вы были бы в состоянии получить значение лейбла от сцены 1 до labelValue собственности CЦEHЫ2 Служит.

ли узнать больше о перетекает здесь: More About Segues and Storyboards here.

================================

Edit:

Далее в отредактированном вопрос, в вашем vIEW2 ViewController, вы объявили labelNumber1 в виде строки, а не как UILabel, поэтому всякий раз, когда вы передаете значение labelNumber1, значение будет содержащий в этой переменной и он не будет отображаться на экране, так как это просто нормальная строка. Так что вы можете сделать, это объявить о labelNumber1, как UILabel

class View2: UIViewController { 

    @IBOutlet var labelNumber1: UILabel! 

..... 
} 

и в вашей подготовке к Segue в ViewController1 внести следующие изменения,

class ViewController1: UIViewController { 
..... 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    // You can access the VC2 instance from the segue 
     if let view2 = segue.destinationViewController as? VC2 { 

     view2.labelNumber1.text = lblResult.text 

     } 
} 

Однако, если вы все еще хотите сохранить labelNumber1 в виде строки, и чтобы проверить, было ли значение передано из ViewController1 во время segue, добавьте ниже строку в viewDidLoad() View2 ViewController.

class View2: UIViewController { 
..... 
    override func viewDidLoad() { 
    super.viewDidLoad() 
    print("labelNumber1: \(labelNumber1)") 
    } 
} 

И вы можете увидеть напечатанное значение labelNumber1 в консоли.

НТН :)

+0

приятный ответ :) Нам даже удалось связаться с тем же учебником Ray Wenderlich – pbodsk

+0

Спасибо. Да, правда, мы ссылались на один и тот же учебник :) – iamyogish

+0

Только что отредактировал мой вопрос –

1

У вас уже есть segue между ViewController1 и ViewController2 кажется, так что теперь вам просто нужно пройти определенную дату от одного к другому. Это можно сделать в функции prepare(for segue: UIStoryboardSegue, sender: AnyObject?), которая вызывается при переходе с ViewController1 на ViewController2.

UIStoryboardSegue класс имеет свойство source типа UIViewController и другое свойство destination, который также является UIViewController.

Таким образом, если определить свойство на вашем ViewController2, например так:

var labelValue: String 

Затем вы можете передать ему значение в вашей prepareForSegue определяется на ViewController1 так:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    guard let viewController2 = segue.destination as? YourViewController2 else { 
     return 
    } 
    viewController2.labelValue = theValueFromViewController1 
} 

Here это учебник, рассказывающий вам немного больше (в Objective C хотя)

И this также является прекрасным представлением.

Надеюсь, что вам поможет.

+0

Только что отредактировал мой вопрос –

+1

OK. Вы почти там. Теперь вы передали значение из ViewController1 в ViewController2, но вам все равно нужно показать его в пользовательском интерфейсе. Например, в viewWillAppear вы можете установить значение Number1V2.text для меткиNumber1 – pbodsk

+0

Спасибо, просто сделал это, и это сработало!: D –

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