我有一个非常彻底的外观,我已经浏览了许多类似的SO线程,但我仍然无法弄清楚为什么PrepareForSegue没有执行它应该。我已经在其他几个VC中实现了它,这次我看不出有什么不同。
PrepareForSegue func
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "viewProfile") {
let vc = segue.destinationViewController as! ProfileController
let x = sender as! UITapGestureRecognizer
let location = x.locationInView(self.myBountiesTableView) as CGPoint
let indexPath = self.myBountiesTableView.indexPathForRowAtPoint(location) as NSIndexPath?
let cell = self.myBountiesTableView.cellForRowAtIndexPath(indexPath!) as! BountyCellNew
vc.userId = cell.bounty.bountyCreatedById!.description
}
}
应该从:MyBountiesVC中触发prepareForSegue的VC。
我检查过的事情:VC类设置为MyBountiesVC。 segue标识符设置为viewProfile。
点击UIImageView时会触发segue,UIImageView上附有UITapGestureRecogniser。我在不同的VC中做了类似的实现,它工作正常。
答案 0 :(得分:0)
请确保您在点按手势识别器中调用performSegueWithIdentifier:sender:
方法。我个人更喜欢在UIButton上添加图像,然后将该按钮的动作处理程序连接到我想在图像上加载的视图控制器。
答案 1 :(得分:0)
正如vacawama让我意识到的那样,我没有勾选“启用用户交互”框。解决。
答案 2 :(得分:0)
您错过了一些代码。
你需要让Tap调用方法performSegueWithIdentifier
,而不仅仅是 ctrl +点击拖动到下一个VC。
添加
let tap = UITapGestureRecognizer(target:self, action:Selector("someMethod:"))
tap.delegate = self
yourImageView.addGesture(tap)
到你的viewDidLoad。确保您已为imageView创建了该属性。
然后创建someMethod
方法:
func someMethod (sender: UITapGestureRecognizer? = nil)
{
self.performSegueWithIdentifier("viewProfile", sender: self)
}
然后你准备好了SeseMethod:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "viewProfile") {
let vc = segue.destinationViewController as! ProfileController
let x = sender as! UITapGestureRecognizer
let location = x.locationInView(self.myBountiesTableView) as CGPoint
let indexPath = self.myBountiesTableView.indexPathForRowAtPoint(location) as NSIndexPath?
let cell = self.myBountiesTableView.cellForRowAtIndexPath(indexPath!) as! BountyCellNew
vc.userId = cell.bounty.bountyCreatedById!.description
}
}