Mik*_*kee 50 uitableview ios swift
我需要使用Xcode 6.4/Swift 1.2以编程方式在UITableView中选择一行.
这是简单的代码:
var index = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.selectRowAtIndexPath(index, animated: true, scrollPosition: UITableViewScrollPosition.Middle)
self.tableView(self.tableView, didSelectRowAtIndexPath: index)
Run Code Online (Sandbox Code Playgroud)
上面给出了以下错误:
无法使用类型'(NSIndexPath!,animated:Bool,scrollPosition:UITableViewScrollPosition)的参数列表调用'selectRowAtIndexPath'
我的代码出了什么问题?也许有人用Swift 1.2体验过这个?
任何帮助是极大的赞赏!
干杯
编辑: 我的UItableView已在UIViewController中的IB中创建,我试图调用上面的代码.当我将代码放在UITableViewController中时,编译器不会给出任何错误.我需要在容器中嵌入UITableViewController还是有另一种方法?
Sou*_*rma 67
Swift 3.x解决方案
选择一行
let indexPath = IndexPath(row: 0, section: 0)
myTableView.selectRow(at: indexPath, animated: true, scrollPosition: .bottom)
myTableView.delegate?.tableView!(myTableView, didSelectRowAt: indexPath)
Run Code Online (Sandbox Code Playgroud)
DeSelecting a Row
let deselectIndexPath = IndexPath(row: 7, section: 0)
myTableView.deselectRow(at: deselectIndexPath, animated: true)
myTableView.delegate?.tableView!(myTableView, didDeselectRowAt: indexPath)
Run Code Online (Sandbox Code Playgroud)
Mar*_*n R 35
该声明
self.tableView.selectRowAtIndexPath(index, animated: true, scrollPosition: UITableViewScrollPosition.Middle)
Run Code Online (Sandbox Code Playgroud)
假设它tableView是视图控制器的属性,连接到Storyboard中的表视图.UITableViewController例如,A 已经拥有此属性.
在您的情况下,视图控制器不是表视图控制器,而是a的子类UIViewController.它也具有连接到表视图的出口,但它不叫
tableView,但menuTable.当然你必须打电话
self.menuTable.selectRowAtIndexPath(index, animated: true, scrollPosition: UITableViewScrollPosition.Middle)
Run Code Online (Sandbox Code Playgroud)
选择该表视图的一行.
奇怪的错误消息是由self.tableView编译器理解为"curried函数" 的事实引起的
(比较http://oleb.net/blog/2014/07/swift-instance-methods-curried-functions/) .
Pan*_*hit 17
在使用数据加载表视图后,使用下面的代码:
let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0); //slecting 0th row with 0th section
self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: UITableViewScrollPosition.None);
Run Code Online (Sandbox Code Playgroud)
现在,您必须使用以下代码手动调用didSelectRowAtIndexPath: delegate方法:
self.tableView(self.tableView, didSelectRowAtIndexPath: rowToSelect); //Manually trigger the row to select
Run Code Online (Sandbox Code Playgroud)
谢谢.
San*_*ndu 11
如果你想在'细胞创造'中做到这一点,你可以这样做
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = TableViewCell()
let item = items[indexPath.row]
cell.textLabel?.text = item.title
if (item.checked) {
tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none)
}
return cell
}
Run Code Online (Sandbox Code Playgroud)
使用Swift 2.x,如Pankaj purohit所述回答正确的方法是:
func tapRowAtIndex(index:Int) {
let rowToSelect:NSIndexPath = NSIndexPath(forRow: index, inSection: 0)
self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: UITableViewScrollPosition.None)
self.tableView(self.tableView, didSelectRowAtIndexPath: rowToSelect)
}
Run Code Online (Sandbox Code Playgroud)
请记住,如果您从外部类调用此方法,您不知道tableView何时完成其加载,那么可能性是什么?,如何解决此问题?:
第一步:创建一个类boolean var
var automatingTap: Bool = false
Run Code Online (Sandbox Code Playgroud)
第二步:检查表何时完成加载并启动"结束操作"方法:
func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath)
{
let lastRowIndex = tableView.numberOfRowsInSection(0)
if indexPath.row == lastRowIndex - 1 {
endOperations()
}
}
func endOperations()
{
print("finished loading")
if automatingTap {
tapRowAtIndex(0)
automatingTap = false
}
}
Run Code Online (Sandbox Code Playgroud)
第三步:从另一个类调用我的tableView类
例如:
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
if segue!.identifier == "DetailsTableView" {
let viewController:ViewController = segue!.destinationViewController as ViewController
viewController.automatingTap = true
}
}
Run Code Online (Sandbox Code Playgroud)
可重用功能,验证表大小
斯威夫特 4 和 5
这个可重用的函数可以工作并验证表的大小。
func selectRow(tableView: UITableView, position: Int) {
let sizeTable = tableView.numberOfRows(inSection: 0)
guard position >= 0 && position < sizeTable else { return }
let indexPath = IndexPath(row: position, section: 0)
tableView.selectRow(at: indexPath, animated: true, scrollPosition: .middle)
}
Run Code Online (Sandbox Code Playgroud)
你可以这样使用它
selectRow(tableView: myTableView, position: pos)
Run Code Online (Sandbox Code Playgroud)
或者你可以实现这个扩展:
extension UITableView {
func selectRow(row: Int, section: Int = 0) {
let sizeTable = self.numberOfRows(inSection: section)
guard row >= 0 && row < sizeTable else { return }
let indexPath = IndexPath(row: row, section: section)
self.selectRow(at: indexPath, animated: true, scrollPosition: .middle)
}
}
Run Code Online (Sandbox Code Playgroud)
你可以这样使用它:
mytableView.selectRow(row: pos, section: 0)
Run Code Online (Sandbox Code Playgroud)
或者
mytableView.selectRow(row: pos)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53554 次 |
| 最近记录: |