使用 StoryBoard 初始化 UI 控件并通過代碼調(diào)用

用過 StoryBoard 的同學一定非常享受往頁面上拖控件,再拖幾個約束就搞定一個 UI 元素的過程,但是在某些情況下,我們還是不得不使用代碼來進行控件初始化和 frame 設(shè)置,這時候如果你懶得寫那 N 行的初始化代碼,你一定會想“要是能在 StoryBoard 中初始化控件,再用代碼調(diào)用就好了”,這事完全可行的,詳細使用方法如下:

  1. 拖動一個控件到目標 ViewController 的文檔樹中
1

這時候 ViewController 看起來是這樣的:

2
  1. 綁定到成員變量
3
import UIKit
class ViewController: UIViewController {
    @IBOutlet var segmentControl: UISegmentedControl!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

  1. 調(diào)用

我們將使用這個 segment control 作為頂欄的標題元素,即把它放到標題的位置:

override func viewDidLoad() {
    super.viewDidLoad()
    
    self.navigationItem.titleView = self.segmentControl
}

結(jié)果:

4
  1. One more thing

需要注意另外一種情況:如果這個視圖已經(jīng)是 ViewController 文檔樹的一部分,那么當我們想把它從文檔樹里抽出來單獨放到其他地方時,會出現(xiàn)位置異常:

5

運行結(jié)果卻是:

6

frame 設(shè)置失效了?確實失效了,不過設(shè)置一下屬性就可以讓 frame 設(shè)置重新有效:

self.label.removeFromSuperview()
self.label.translatesAutoresizingMaskIntoConstraints = true // 就是我
self.label.center = self.view.center
self.view.addSubview(label)

成功:

7

本文轉(zhuǎn)自大神 JohnLui 文章 https://autolayout.club/2016/06/25/可視化編程-Tips-之“如何使用-StoryBoard-初始化-UI-控件并通過代碼調(diào)用”/#more

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容