看完前面, 咱們已經把 iOS 中的經常使用的控件都講完了, 如今咱們該來看看怎麼去使用這些控件去開發咱們的應用了, 如今讓咱們來看看:編程
建立完工程以後, 咱們去到 Main.Storyboard, 佈局咱們須要的界面:
swift
咱們能夠利用 Xcode 的特性, 快速把一個 ViewController 交給 NavigationController 管理.markdown
流程: 選中你想要得 ViewController -> 找到 Xcode 的 Editor 菜單欄 -> 選中 Embed -> 點擊 Navigation Controller.ide
這樣子就能夠快速的把一個 ViewController 交給 NavigationController 管理了, 示意圖:
函數
PS: 這裏面咱們使用了 AutoLayout 來進行佈局, 若是沒有熟悉這套機制的朋友, 暫時使用大家以前佈局的方式進行佈局, 後面我會詳細的去講解 AutoLayout 這套機制.佈局
在咱們開始實現的時候, 咱們須要作幾個事情, 那就是綁定控件, 而且定義幾個變量, 有人會問, 這幾個變量有什麼用?優化
這幾個變量其實就是用來進行判斷, 而且賦值來使用的, 下面讓咱們來看看這幾個變量:動畫
ViewControllerOne.swiftui
// 1.關聯 UITextView 控件
@IBOutlet weak var TextViewOne: UITextView!
// 2.聲明一個 UITextView 類型的對象, 用來判斷是不是當前正在編輯的 UITextView
var currentEditingBox:UITextView?
ViewControllerTwo.swiftspa
// 1.關聯 ViewControllerTwo 的 UITextView 控件
@IBOutlet weak var TextViewTwo: UITextView!
// 1.1聲明一個回調函數
var saveCallBack: ((text:String)->Void)?
// 1.2聲明一個字符串變量, 初始化爲空
var inputText: String?
// 1.3聲明兩個用來判斷 UITextView 有多少字數的 Int 變量, 初始化爲0
var maxChar = 0
var number = 0
首先咱們要遵照 UITextView 的代理協議, 而且設置代理對象
ViewControllerOne.swift
class ViewController: UIViewController, UITextViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// 3.設置 TextViewOne 的代理對象
TextViewOne.delegate = self
}
}
使用代理方法
// 4.調用 UITextView 的代理方法, 該方法在點擊 UITextView 進行編輯時纔會調用
func textViewDidBeginEditing(textView: UITextView) {
// 5.獲取須要跳轉的 Controller 所在的 Storyboard
let storyboard = UIStoryboard(name: "Main", bundle: nil)
// 6.獲取須要跳轉的 Controller 的 ID 以及綁定的類
let viewController = storyboard.instantiateViewControllerWithIdentifier("textViewTwo") as! ViewControllerTwo
// 7.設置 ViewControllerTwo 裏的 inpuText 的內容爲當前 TextView 的內容
viewController.inputText = textView.text
println("inputText = \(viewController.inputText)")
// 8.調用回調函數
viewController.saveCallBack = onTextSaved
println("saveCallBack = \(viewController.saveCallBack)")
// 9.設置 TextView 裏所要限制的字數
viewController.maxChar = 14
// 10.設置當前處在編輯狀態的 TextView
currentEditingBox = textView
println("currentEditingBox = \(currentEditingBox)")
println("TextViewOne = \(TextViewOne)")
// 11.進行頁面跳轉, 以及是否要使用動畫效果
self.navigationController?.pushViewController(viewController, animated: true)
}
聲明傳參方法
// 12.聲明保存文本內容的方法, 而且須要傳入一個 String 類型的參數
func onTextSaved(text:String) {
println("text = \(text)")
// 13.判斷若是當前編輯的 TextView 不爲空, 那麼就執行判斷語句
if currentEditingBox != nil {
// 14.把輸入完成的文本內容解包而且賦值到當前正在編輯的TextView
currentEditingBox!.text = text
}
}
ViewControllerTwo.swift
這裏除了要遵照代理協議, 設置代理對象, 還須要多作一點事情
class ViewControllerTwo: UIViewController, UITextViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// 2打印一下, 是否傳參成功
println("inputText = \(inputText)")
// 2.1讓 TextViewTwo 成爲第一響應者
TextViewTwo.becomeFirstResponder()
// 2.2設置 TextViewTwo 的代理對象
TextViewTwo.delegate = self
// 2.3判斷 inputText 是不是 nil, 若是是nil的話, 就把內容賦給 TextViewTwo
if inputText != nil {
TextViewTwo.text = inputText
}
}
}
綁定保存按鈕, 而且實現傳參方法
// 點擊保存按鈕
@IBAction func saveBarButtonItem(sender: UIBarButtonItem) {
// 3.取消 TextViewTwo 的第一響應者
TextViewTwo.resignFirstResponder()
// 3.1判斷 saveCallBack 是否爲 nil, 若是不爲 nil, 就把內容解包而且傳到 TextViewTwo
if saveCallBack != nil{
saveCallBack!(text: TextViewTwo.text)
}
println("傳參到 contentCollectionView 的 TextView")
println("TextViewTwo.text = \(TextViewTwo.text)")
// 3.2當上面的操做完成時, 會調用下面的方法把頁面關掉
self.navigationController?.popViewControllerAnimated(true)
}
綁定取消按鈕, 而且實現取消保存文本的方法
// 點擊取消按鈕
@IBAction func cancelBarButtonItem(sender: UIBarButtonItem) {
// 4.取消 TextViewTwo 的第一響應者
TextViewTwo.resignFirstResponder()
// 4.1當上面的操做完成時, 會調用下面的方法把頁面關掉
self.navigationController?.popViewControllerAnimated(true)
}
體驗優化
// 自動清除從上一個界面帶過來的內容, 保證用戶是從0開始輸入的
func textViewDidBeginEditing(textView: UITextView) {
if textView.text == "請輸入內容:" {
textView.text = ""
}
}
// 設置 UITextView 輸入的內容一旦大於或者等於限制的最大值, 就中止輸入
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if range.location > maxChar {
var alert = UIAlertView(title: "提示", message: "字符個數不能大於\(maxChar)!", delegate: self, cancelButtonTitle: "肯定")
alert.show()
return false
}
return true
}
說了那麼多東西都是假的, 開發最重要的核心就是編程思想, 一個好的編程思想能夠決定軟件的質量和生命, 在這裏我作了一個思惟導圖, 方便你們去理解:
好了, 此次就講到這裏, 下次咱們再見~~
代碼我會放到網上去, 供你們下載參考, 地址放在評論區