Я использую делегацию для передачи информации с контроллера вида. Это методИзменение текста меток внутри метода
func writeValueBack(value: String) {
self.label.text = value
}
функция вызывается, и все отлично, кроме этикетки не обновляется.
Метка имеет значение и не возвращает ноль, я проверил с этой линией
println(self.label.text)
Он печатает значение «значение»
Так что это означает, что текст лейбла создается в 'value', но это не обновление.
Я даже попытался использовать основной поток, но не повезло
func writeValueBack(value: String) {
dispatch_async(dispatch_get_main_queue(), {() -> Void in
self.label.text = value
})
}
Я просто не знаю, в чем проблема.
Любая помощь будет отличной.
Протокол:
protocol writeValueBackDelegate {
func writeValueBack(value: String)
}
EDIT: Код для моего контроллера представления:
//
// ViewController.swift
// DelegateTesting
//
// Created by Alex Catchpole on 30/11/2014.
// Copyright (c) 2014 Alex Catchpole. All rights reserved.
//
import UIKit
class ViewController: UIViewController, writeValueBackDelegate {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "MainSegue" {
var vc = segue.destinationViewController as SecondViewController
vc.labelText = textField.text
vc.delegate = self
}
}
func writeValueBack(value: String) {
dispatch_async(dispatch_get_main_queue(), {() -> Void in
self.label.text = value
})
}
@IBAction func button(sender: AnyObject) {
self.label.text = textField.text
}
@IBAction func segue(sender: AnyObject) {
performSegueWithIdentifier("MainSegue", sender: self)
}
}
Второй ViewController источник:
//
// SecondViewController.swift
// DelegateTesting
//
// Created by Alex Catchpole on 30/11/2014.
// Copyright (c) 2014 Alex Catchpole. All rights reserved.
//
import UIKit
class SecondViewController: UIViewController {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var textField: UITextField!
var labelText: String!
var delegate: writeValueBackDelegate? = nil
override func viewDidLoad() {
super.viewDidLoad()
label.text = labelText
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func button(sender: AnyObject) {
label.text = textField.text
}
@IBAction func segueBack(sender: AnyObject) {
var editedText = label.text
performSegueWithIdentifier("SecondSegue", sender: self)
if (delegate != nil) {
delegate?.writeValueBack(editedText)
println("working")
}
}
}
ли '' self.label' в UILabel' или 'UIButton'? – pwightman
Это UILabel, а не кнопка. –
Просто чтобы добавить, ничего не будет обновляться. Я попытался установить текст textField тем же методом и ничего. Значение применяется, но элемент пользовательского интерфейса не обновляется. –