所以我有一个分段控件,可以在2个TableViews& 1 MainVC中的MapView。
我可以通过添加IBAction func changedInSegmentedControl来切换模拟器中的视图,以切换哪些视图在其中一个处于活动状态时被隐藏。
我用XIB创建了2个自定义TableViewCells。我还为每个TableView添加了标签。
我的问题是如何在cellForRowAtIndexPath中添加它们?
目前,我的代码是:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
// var cell: UITableViewCell
if (tableView.tag == 1) {
cell: CardTableViewCell = tableView.dequeueReusableCellWithIdentifier("CardCell") as! CardTableViewCell
return cell
}
else if (tableView.tag == 2) {
cell: ListTableViewCell = tableView.dequeueReusableCellWithIdentifier("ListCell") as! ListTableViewCell
return cell
}
}
当然,Swift需要一个"返回单元"对于If语句之外的函数。我尝试使用var cell:UITableViewCell外部,但在完成dequeuReusableCellWithIdentifier时遇到了麻烦。
任何人都知道如何做到这一点?感谢。
答案 0 :(得分:0)
我已对您的代码进行了更改。 使用以下代码
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
if (tableView.tag == 1) {
cell: CardTableViewCell = tableView.dequeueReusableCellWithIdentifier("CardCell") as! CardTableViewCell
return cell
}
cell: ListTableViewCell = tableView.dequeueReusableCellWithIdentifier("ListCell") as! ListTableViewCell
return cell
}
答案 1 :(得分:0)
这就是我接近它的方式(iOS 10上的Swift 3.0)。我用两个自定义单元格创建了一个tableView(每个单元格都是自己的子类)。分段控件位于我的navigationBar上,有两个部分:People和Places。
我的类中有两个数组(人和地点),它们是两个表视图的数据源。附加到segmentedControl的操作会触发表的重新加载,cellForRowAtIndex
中的switch语句控制从哪个单元加载数组。
我从API调用将数据加载到两个数据数组中,异步完成触发dataLoaded()
,重新加载tableView。同样,我不必担心重新加载表时选择了哪个段:cellForRowAtIndex
负责加载正确的数据。
我像UITableViewCell一样初始化一个基本单元格,然后在我创建的case语句中并配置自定义单元格。然后我在最后返回我的自定义类型单元格,只要在cellForRowAtIndex
中的reuseIdentifiers和类正确,就会初始化正确的单元格并显示在tableView中。
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var peoplePlacesControl: UISegmentedControl!
fileprivate var placesArray: [PlaceModel]?
fileprivate var usersArray: [UserModel]?
@IBAction func segmentedControlActionChanged(_ sender: AnyObject) {
tableView.reloadData()
switch segmentedControl.selectedSegmentIndex {
case 0:
loadUsersfromAPI()
case 1:
loadPlacesFromAPI()
default:
// shouldnt get here
return
}
}
func dataLoaded() {
switch peoplePlacesControl.selectedSegmentIndex {
case 0: // users
if favoriteUsersArray == nil {
self.tableView.reloadData()
} else {
hideTableViewWhileEmpty()
}
case 1: // places
if placesArray != nil {
self.tableView.reloadData()
} else {
hideTableViewWhileEmpty()
}
default:
return
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch segmentedControl.selectedSegmentIndex {
case 0:
if usersArray != nil {
return usersArray!.count
} else {
return 0
}
case 1: // places
if placesArray != nil {
return placesArray!.count
} else {
return 0
}
default:
return 0
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = UITableViewCell()
switch peoplePlacesControl.selectedSegmentIndex {
case 0: // people
let userCell = tableView.dequeueReusableCell(withIdentifier: "MyUserCell", for: indexPath) as! MyUserTableViewCell
if usersArray != nil && indexPath.row < usersArray!.count {
let user = usersArray![indexPath.row]
userCell.configure(user)
userCell.myDelegate = self
}
cell = userCell as MyUserTableViewCell
case 1: // places
let placeCell = tableView.dequeueReusableCell(withIdentifier: "MyPlaceCell", for: indexPath) as! MyPlaceTableViewCell
if favoritePlacesArray != nil && indexPath.row < favoritePlacesArray!.count {
let place = placesArray![indexPath.row]
placeCell.configure(place)
placeCell.myDelegate = self
}
cell = placeCell as MyPlaceTableViewCell
default:
break
}
return cell
}