亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

BeginningiOS8ProgrammingwithSwift-TableView

2019-11-14 19:52:36
字體:
來源:轉載
供稿:網友

UITableView控件使用

使用UITableView,在控件庫中,拖拽一個Table View到ViewController中,在Controller的后臺代碼中需要繼承UITableViewDelegate和UITableViewDataSource的協議。
重寫方法
tableView(_:numberOfRowsInSection)
此方法是UITableViewDataSource協議的方法,返回tableView加載的行數。
實例代碼
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// Return the number of rows in the section.
//返回table中每個節點行數,在tableView中還可以使用節,就是組。后續介紹組的用法
return restaurantNames.count
}
tableView(_:cellForRowAtIndexPath)
此方法是UITableViewDatSource協議的方法,該方法中實現如何加載TableView中的數據。
實例代碼
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->UITableViewCell {
//這里是的Cell是在Storyboard中設置的tableViewCell的Identifier
let cellIdentifier = "Cell"
//這就是獲取單元格
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath:
indexPath) as UITableViewCell
// Configure the cell...
cell.textLabel.text = restaurantNames[indexPath.row]
return cell
}
dequeueReusableCellWithIdentifier:從queue中取回一個名稱是[identifier]的可用的單元格。這里為什么是從列隊中?。嚎慈缦陆忉專?br />

設置dataSource和delegate

兩種方式設置tableView的dataSource和delegate

  1. 在Storyboard中右鍵選擇tableView


將dataSource和delegate拖動到當前的ViewController上

  1. 在Controller的代碼中,鏈接tableView

@IBOutlet var tableView: UITableView!
然后再viewDidLoad的方法中設置tableView的dataSource和delegate
tableView.dataSource = self
tableView.delegate = self

設置單元格的縮略圖

在tableView(_:cellForRowAtIndexpath)的方法中
cell.imageView.image = UIImage(name:"imagename")

隱藏狀態欄

override func PRefersstatusBarHidden() -> Bool {
return true
}

自定義單元格

修改Custom屬性

在storyboard中選擇tableViewCell,在屬性索引器中,將Style的屬性變更為Custom

修改tableView行高

修改單元格行高

自定義單元格樣式

在控件庫中,可以拖拽控件到單元格中拜訪出自己想要的格式

為自定義單元格創建類文件

在工程中添加新文件(command + N),選擇Cocoa Touch Class,在SubClass of中選擇UITableViewCell,不需要xib文件。
在類文件中定義控件
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var locationLabel: UILabel!
@IBOutlet weak var typeLabel: UILabel!
@IBOutlet weak var thumbnailImageView: UIImageView!

關聯類文件和控件定義

設置tableViewCell的class為新建的class

設置控件關聯

關聯后結果

修改獲取單元格的方法

在tableView(_:cellForRowAtIndexpath)的方法中,把原來的獲取單元格的方法修改
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath:
indexPath) as UITableViewCell
修改后
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath:
indexPath) as CustomTableViewCell
CustomTableViewCell就是我們新定義的類
設置單元格
cell.nameLabel.text = restaurantNames[indexPath.row]
cell.thumbnailImageView.image = UIImage(named: restaurantImages[indexPath.row])

如何設置圖片圓角

代碼實現:
cell.thumbnailImageView.layer.cornerRadius = cell.thumbnailImageView.frame.size.width / 2
cell.thumbnailImageView.clipsToBounds = true
clipsToBounds是一個屬性開關,只有打開,圓角設置才有效
設置實現:
選擇ImageView控件,做如下設置

在User Defined Runtime Attributes中添加key 和 value。 這時不需要設置開關。
同樣,我們可以在這里修改backgroundColor,Fond…

單元格選擇和UIAlertController

在UITableViewDelegate的協議中,有兩個方法
tableView(_:willSelectRowAtIndexpath) 選擇前
tableView(_:didSelectRowAtIndexpath) 選擇后

設置單元格選中

let cell = tableView.cellForRowAtIndexPath(indexPath)
通過indexPath來獲取單元格的時候會產生一個Bug,前面我們有講過,Cell的加載是通過queue中獲取,受queue的印象,在獲取cell的時候,會有錯位的Bug,解決這個問題的方法是通過控制數據源來解決。
通過設置cell的accessoryType來設置cell的選中狀態
cell.accessoryType = UITableViewCellAccessoryType.Checkmark

UIAlertController的使用

實例代碼我們寫在tableView(_:didSelectRowAtIndexpath)的方法中
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath:
NSIndexPath) {
// Create an option menu as an action sheet
let optionMenu = UIAlertController(title: nil, message: "What do you want to do?",
preferredStyle: .ActionSheet)
// Add actions to the menu
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
optionMenu.addAction(cancelAction)
// Display the menu
self.presentViewController(optionMenu, animated: true, completion: nil)
}
UIAlertControllerStyle有兩種,
.Alert
.ActionSheet

1、使用AlertController首先是要創建UIAlertController對象
let optionMenu = UIAlertController(title: nil, message: "What do you want to do?",
preferredStyle: .ActionSheet)
2、然后創建UIAlertAction
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
3、把action添加到Controller中,如果AlertControllerStyole是.ActionSheet,那么在AlertController中可以添加多個Action
optionMenu.addAction(cancelAction)
4、呈現AlertController
// Display the menu
self.presentViewController(optionMenu, animated: true, completion: nil)
在創建action中,有關handler,這里是個委托,可以用閉包實現,也可以做個函數傳遞函數名稱,就是在action點擊后觸發的委托
let isVisitedAction = UIAlertAction(title: "I've beenhere", style: .Default, handler: {
(action:UIAlertAction!) -> Void in
let cell = tableView.cellForRowAtIndexPath(indexPath)
cell?.accessoryType = .Checkmark
self.restaurantIsVisited[indexPath.row] = true
})
簡化閉包寫法
let isVisitedAction = UIAlertAction(title: "I've beenhere", style: .Default) {
//$0表示第一個參數,這里關閉閉包用法可以參考語法筆記
let sender = $0
let cell = tableView.cellForRowAtIndexPath(indexPath)
cell?.accessoryType = .Checkmark
self.restaurantIsVisited[indexPath.row] = true
}

UIAlertView

UIAlertView類似UIAlertController中的Action,使用相對簡單
let alertView = UIAlertView(title:"", message:"", delegate:nil, cancelButtonTitle:"")
alertView.show()

TableRow的刪除

在UITableViewDataSource的協議中有個方法
tableView(_:commitEditingStyle:forRowAtIndexPath(smile)
在ViewController的類中重寫該方法,不做任何實現可以看到如下效果
override func tableView(tableView: UITableView, 
commitEditingStyle editingStyle:UITableViewCellEditingStyle, 
forRowAtIndexPath indexPath: NSIndexPath) {
}

當點擊刪除按鈕,如果要做相關操作,可以在上述方法中實現
實例代碼:
override func tableView(tableView: UITableView, commitEditingStyle editingStyle:
UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
// Delete the row from the data source
self.restaurantNames.removeAtIndex(indexPath.row)
self.restaurantLocations.removeAtIndex(indexPath.row)
self.restaurantTypes.removeAtIndex(indexPath.row)
self.restaurantIsVisited.removeAtIndex(indexPath.row)
self.restaurantImages.removeAtIndex(indexPath.row)
//刪除row
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
}
//重新加載tableView
self.tableView.reloadData() 
}

添加RowAction

在IOS 8 SDK中有個新成員UITableViewRowAction,利用這個新成員,我們可以在Row上面有更多的操作

  1. 重寫UITableViewDataSource的一個方法tableView(_:editActionsForRowAtIndexPath)
  2. 創建UITableViewRowAction

var shareAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title:
"Share", handler:nil)

  1. 實現Action后的委托
  2. 返回RowAction

實例代碼:
override func tableView(tableView: UITableView, 
editActionsForRowAtIndexPath indexPath:
NSIndexPath) -> [AnyObject] {
var shareAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title:
"Share", handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in
let shareMenu = UIAlertController(title: nil, message: "Share using",
preferredStyle: .ActionSheet) 
let twitterAction = UIAlertAction(title: "Twitter", style:
UIAlertActionStyle.Default, handler: nil)
let facebookAction = UIAlertAction(title: "Facebook", style:
UIAlertActionStyle.Default, handler: nil)
let emailAction = UIAlertAction(title: "Email", style: UIAlertActionStyle.Default,
handler: nil)
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel,
handler: nil)
shareMenu.addAction(twitterAction)
shareMenu.addAction(facebookAction)
shareMenu.addAction(emailAction)
shareMenu.addAction(cancelAction)
self.presentViewController(shareMenu, animated: true, completion: nil)
}
)
var deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default,
title: "Delete",handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in
// Delete the row from the data source
self.restaurantNames.removeAtIndex(indexPath.row)
self.restaurantLocations.removeAtIndex(indexPath.row)
self.restaurantTypes.removeAtIndex(indexPath.row)
self.restaurantIsVisited.removeAtIndex(indexPath.row)
self.restaurantImages.removeAtIndex(indexPath.row)
self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
)
return [deleteAction, shareAction]
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧日韩在线观看| 亚洲天堂网站在线观看视频| 欧美在线免费看| 日韩精品极品在线观看| 欧美激情在线一区| 91在线免费视频| 久久亚洲国产精品成人av秋霞| 色综合伊人色综合网站| 九九久久久久久久久激情| 欧美最顶级的aⅴ艳星| 中文字幕欧美日韩va免费视频| 亚洲午夜精品视频| 欧美精品一本久久男人的天堂| 日韩视频免费中文字幕| 91精品中文在线| 国产成人极品视频| 国产亚洲欧美日韩一区二区| 日韩精品视频中文在线观看| 97精品国产97久久久久久免费| 亚洲香蕉伊综合在人在线视看| 国产91精品在线播放| 中文字幕日韩欧美精品在线观看| 国产精品福利无圣光在线一区| 亚洲国产另类久久精品| 91精品国产综合久久香蕉的用户体验| 韩剧1988免费观看全集| 97精品一区二区视频在线观看| 久久久国产91| 欧美整片在线观看| 国产亚洲一区二区精品| 精品在线观看国产| 亚洲女同精品视频| 成人久久18免费网站图片| 国产丝袜视频一区| 色综合久久天天综线观看| 午夜精品久久久久久久男人的天堂| 精品福利在线视频| 奇米成人av国产一区二区三区| 国产精品亚洲美女av网站| 性色av一区二区三区免费| 国产精品永久免费在线| 日本精品久久中文字幕佐佐木| 91精品国产综合久久久久久久久| yellow中文字幕久久| 日韩国产精品一区| 在线播放国产一区二区三区| 精品精品国产国产自在线| 欧美日韩成人在线视频| 全亚洲最色的网站在线观看| 国产精品第二页| 97av在线影院| 96国产粉嫩美女| 国产精品久久激情| 日韩视频欧美视频| 欧美成人午夜免费视在线看片| 97视频免费在线看| 不卡中文字幕av| 97超碰蝌蚪网人人做人人爽| 亚洲欧洲日产国码av系列天堂| 精品国产自在精品国产浪潮| 国产精品女主播| 91精品91久久久久久| 97久久国产精品| 精品国产91久久久| 91av成人在线| 日韩黄色av网站| 欧美一乱一性一交一视频| 日韩av电影中文字幕| 亚洲色图欧美制服丝袜另类第一页| 精品呦交小u女在线| 亚洲精品大尺度| 午夜精品久久久久久99热软件| 中文字幕精品久久久久| 久久91精品国产| 国产精品视频一区二区三区四| 午夜精品一区二区三区在线| 亚洲缚视频在线观看| 亚洲无av在线中文字幕| 国产午夜精品美女视频明星a级| 久久综合久久八八| 欧美性猛交xxxx富婆弯腰| 欧美成人中文字幕| 亚洲欧美日韩区| 亚洲欧美日本另类| 国产精品久久久久久久app| 亚洲欧美第一页| 在线精品高清中文字幕| 在线观看日韩视频| 激情av一区二区| 国产成一区二区| 国产欧美 在线欧美| 国产精品一区二区3区| 91久久精品久久国产性色也91| 国产91|九色| 欧美日韩国产精品一区| 亚洲黄色www网站| 久久99国产精品久久久久久久久| 精品露脸国产偷人在视频| 夜夜嗨av一区二区三区四区| 亚洲精品欧美日韩专区| 欧美有码在线视频| 欧美国产日韩免费| 日韩美女av在线免费观看| 国产日韩视频在线观看| 成人激情视频在线播放| 国产成人综合精品在线| 国产精品福利在线| 国产成人在线播放| 亚洲自拍偷拍色片视频| 久久久久久高潮国产精品视| 日韩电影中文 亚洲精品乱码| 国产精品www色诱视频| 久久精品亚洲国产| 精品一区二区三区三区| 久久99青青精品免费观看| 91精品91久久久久久| 国产精品日韩欧美大师| 国产成人精品av在线| 成人美女av在线直播| 国产精品白丝av嫩草影院| 日韩欧美在线免费观看| 国产成人久久久| 91高清视频免费| 亚洲护士老师的毛茸茸最新章节| 国产精品免费久久久久久| 国产主播欧美精品| 国产脚交av在线一区二区| 亚洲一品av免费观看| 欧美成人精品在线观看| 日韩高清电影好看的电视剧电影| 国产精品va在线播放| 91免费高清视频| 国产精品福利网| 欧美电影电视剧在线观看| 欧美黑人一级爽快片淫片高清| 2019亚洲日韩新视频| 欧美国产亚洲精品久久久8v| 国外色69视频在线观看| 久久久久久久久国产精品| 亚洲白拍色综合图区| 久久久视频在线| 国产欧美中文字幕| 亚洲香蕉成人av网站在线观看| 国外成人性视频| 日韩精品中文字幕久久臀| 欧美精品激情在线观看| 国产欧美精品日韩精品| 96精品视频在线| 国产精品第2页| 精品视频在线播放免| 欧美精品video| 欧美激情二区三区| 国产精品中文字幕在线观看| 欧美在线激情视频| 丰满岳妇乱一区二区三区| 日本午夜精品理论片a级appf发布| 久久久女女女女999久久| 成人免费高清完整版在线观看| 日韩精品免费视频| 日韩在线观看免费全| 最近中文字幕mv在线一区二区三区四区| 91精品在线观| 亚洲自拍中文字幕| 国产亚洲精品久久久久久牛牛|