当我点击用户名时,我正试图转到用户的个人资料屏幕(请参阅下面的屏幕截图)。我有一个UITableViewController
,其Feed UITableViewCell
每个都有一个usernameLabel
(UILabel)和一个透明的userNameButton
(UIButton)直接放在{{1}的顶部为了使UILabel可见。按钮本质上就像一个“命中区域”。我知道我应该删除UILabel并让UIButton的文本更新来说出用户名,但这是一个不同的故事。
这是我的IBAction(Segue代码还没有在这里):
usernameLabel
几个问题:
@IBAction func usernameButtonPressed(sender: UIButton) {
let indexPath = NSIndexPath(forRow: sender.tag, inSection: 0)
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! DrawingTableViewCell
print("index path is: \(indexPath)")
let cellsUsernameString = cell.usernameLabel.text
print("just tapped the Feed username button for \(cellsUsernameString!)")
}
位于我的UITableViewController中。我应该把这个IBAction放在UITableViewCell的类中吗?或者这里好吗?usernameButtonPressed
I打印对于每个表格单元格完全相同。为什么是这样?我的indexPath
不会更新为不同的int值吗?总的来说,我采取此操作的目标是从每个相应的tableview单元格中获取特定用户的用户(或对象)信息,以便我可以正确地转到该特定用户配置文件。显然我需要更多的代码才能做到这一点,但这是我尝试这一点的开始,此时我只是想为每个单元格获取正确的用户名。
这是TableView的屏幕截图,试图提供更多上下文:
答案 0 :(得分:1)
2& 3.在某种程度上未知,您还没有显示设置它的代码。但是,大多数问题是你将新单元格出列而不是获得当前单元格。您不应该将您不会使用的新单元格出列,否则会损坏表格视图单元格缓存。你也得到了我配置的单元格......
答案 1 :(得分:1)
您的所有UITableViewCell的发件人标签都是相同的,因为您要将相同的自定义单元格出列。
您应该将UITableViewCell子类化并将您的IBAction方法移动到该子类中。您还需要将故事板中的单元类更改为新的子类。
您可以使用与数据源中相同的类型在UItableViewCell子类中声明属性,并在cellForRowAtIndexPath方法中指定此属性。
然后在自定义单元格中的IBAction中,您将转到用户的配置文件屏幕,并传递自定义单元格中的对象或标签文本。然后,您将在prepareForSegue中获取目标视图控制器并将此属性分配给它。