比如頁面上只有一個表格(UITableView),當點擊頂部狀態條後,表格會像QQ、微信聯系人列表那樣回到最上面。
這個是iOS系統默認就有的。
這時我們需要把不需要滾動的 scrollView 的 scrollToTop 設為 false,只留下一個。
tableView?.scrollsToTop = false;
3,狀態欄點擊事件響應
有時我們想在狀態欄點擊的時候,除了讓視圖自動滾動外,還想執行一些其他操作。實現方式分為下面兩種情況:
(1)頁面上有scrollView時
如果頁面上有滾動視圖的話,直接在 scrollViewShouldScrollToTop() 事件響應中添加相關操作即可。
(注:如過不需要滾動視圖,方法內可以return false)
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var tableView:UITableView?
override func loadView() {
super.loadView()
}
override func viewDidLoad() {
super.viewDidLoad()
//創建表視圖
self.tableView = UITableView(frame: self.view.frame, style:UITableViewStyle.Plain)
self.tableView!.delegate = self
self.tableView!.dataSource = self
//創建一個重用的單元格
self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell")
self.view.addSubview(self.tableView!)
}
func scrollViewShouldScrollToTop(scrollView: UIScrollView) -> Bool {
print("狀態欄點擊")
//這裡添加需要執行的代碼邏輯....
//不滾動表格視圖
return false
}
//在本例中,只有一個分區
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1;
}
//返回表格行數(也就是返回控件數)
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 100
}
//創建各單元顯示內容(創建參數indexPath指定的單元)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
-> UITableViewCell
{
//為了提供表格顯示性能,已創建完成的單元需重復使用
let identify:String = "SwiftCell"
//同一形式的單元格重復使用,在聲明時已注冊
let cell = tableView.dequeueReusableCellWithIdentifier(identify,
forIndexPath: indexPath) as UITableViewCell
cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
cell.textLabel?.text = "條目數據\(indexPath.row)"
return cell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
(2)頁面上沒有scrollView時
如果頁面上沒有滾動視圖,我們可以自己添加個隱藏的scrollView(高度為0),然後同樣在 scrollViewShouldScrollToTop() 中添加相應的操作。
(注:不要使用 hidden 或者 alpha=0 隱藏 scrollView,會無法調用 scrollViewShouldScrollToTop() 方法)
import UIKit
class ViewController: UIViewController, UIScrollViewDelegate{
var tableView:UITableView?
override func loadView() {
super.loadView()
}
override func viewDidLoad() {
super.viewDidLoad()
//創建一個隱藏的滾動視圖
let scrollView = UIScrollView()
scrollView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 0)
scrollView.contentSize = CGSize(width: self.view.frame.width,height: 10)
scrollView.contentOffset = CGPoint(x: 0,y: 10)
scrollView.delegate = self
self.view.addSubview(scrollView)
}
func scrollViewShouldScrollToTop(scrollView: UIScrollView) -> Bool {
print("狀態欄點擊")
//這裡添加需要執行的代碼邏輯....
//不滾動視圖
return false
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}