위임을 사용하여보기 컨트롤러에서 정보를 다시 전달하고 있습니다. 이 함수가 호출되는 방법메서드 내에서 레이블 텍스트 변경
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)
}
편집 :
//
// 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")
}
}
}
는'UILabel'을 self.label''인
writeValueBackDelegate
선언과 관련 변수의writeValueBack
방법과 두 번째 뷰 컨트롤러의segueBack
방법을 제거 할 수 있습니다 또는'UIButton'? – pwightman버튼이 아니라 UILabel입니다. –
그냥 추가하면 아무것도 업데이트되지 않습니다. textField의 텍스트를 같은 방법으로 설정하려고 시도했지만 아무 것도하지 않았습니다. 값이 적용되지만 UI 요소가 업데이트되지 않습니다. –