Ios 分段目的地类型和类型;如何在代码中找到它们
有谁能告诉我如何使用Ios 分段目的地类型和类型;如何在代码中找到它们,ios,xcode,ipad,uistoryboard,Ios,Xcode,Ipad,Uistoryboard,有谁能告诉我如何使用if()语句来发现segue的目标视图控制器是出现在细节拆分中还是出现在主拆分中 我想把if()语句放在我的prepareforsgue:sender:方法中 编辑 我所有与此问题相关的详细视图(目前)都符合协议,我目前正在使用以下方法对目标控制器进行自省: if ([segue.destinationViewController conformsToProtocol:@protocol(myProtocol)])... 我可以看出,如果我愿意,这是行不通的: 为了能够随时
if()
语句来发现segue的目标视图控制器是出现在细节拆分中还是出现在主拆分中
我想把if()
语句放在我的prepareforsgue:sender:
方法中
编辑
我所有与此问题相关的详细视图(目前)都符合协议,我目前正在使用以下方法对目标控制器进行自省:
if ([segue.destinationViewController conformsToProtocol:@protocol(myProtocol)])...
我可以看出,如果我愿意,这是行不通的:
我想我可以在destinationViewController的视图中查询它,在它出现在屏幕上之后,会发现它在哪个NavigationController中,但是,它似乎有点“黑客化”。可能有一种更好的更抽象、更可重用的方法,我不知道,但这里有一个建议,可以帮助你的具体项目,只需要一点特殊的知识,你的具体项目 如果您在准备segue时使用内省,您可以使用responsedto方法检查方法是否存在 因此,例如,在splitview控制器的典型实现中(注意-并非全部),详图视图将实现处理旋转的方法。因此,如果这在您的项目中是真的,您可以这样做:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.destinationViewController respondsToSelector:@selector(splitViewController:shouldHideViewController:inOrientation:)]) {
//do something
}
}
您可以基于项目中与主视图或详细视图相关的独特但不变的内容使用相同的方法
希望有帮助,
保持良好我的经验有点有限,但大多数时候我看到使用
prepareForSegue
时,if()
块检查segue.identifier
来做任何需要专门处理构建新页面的事情。如果您为所有segue设置了标识符,您可以只使用代码来处理来自该控制器的每个segue,并根据该segue是否转到masterViewController或detailViewController更改代码。这不是一种自动化程度很高的方法,但它可以完成工作
编辑:哦,天哪,这个措辞有点让人困惑。如果你想让我写一个代码示例,但必须等到星期一,因为那时我才可以访问Mac。关于类和协议的讨论给了我另一个想法,但同样,我不确定它是否有效-我想在发布之前测试它,但我不会很快有时间测试 我认为您应该能够创建两个新类,UIMasterViewController和UIDetailViewController,它们只是UIViewController的子类。然后,对于每个实际屏幕,不要直接将其设置为UIViewController的子类,而是将其设置为UIDetailViewController或UIMasterViewController。然后,在您的
prepareForSegue
中
if ([segue.destinationViewController isKindOfClass:UIMasterViewController])
{
//do master view specific stuff
}
else if ([segue.destinationViewController isKindOfClass:UIDetailViewController])
{
//do detail view stuff here
}
只要您能够正确设置自定义视图控制器类,这应该是一种非常可靠的方法来告诉您的segue将发送给您的位置。这仍然不能解决问题中提到的第一个问题
让我知道这是否有效-我不确定如何设置我头顶上的控制器,但我非常确定这是可以做到的。如果可以的话,我认为这是一件非常有用的事情。谢谢你的支持。我用这个按钮做一些事情,这会很好。我已经从一个采用协议的类中对我的所有细节视图进行了子类化,所以我实际上也在做同样的事情,但是使用了
conformsToProtocol
。因为在设置segue时必须选择“detailsplit”或“mastersplit”,所以我认为可能有一种方法可以更直接地访问它。有时我想在任何一方展示同一个课程,而内省可能不起作用。谢谢。我需要比这更一般的东西,因为这将是子类很多,我不想依赖我的命名约定是那么僵硬。。。或者我的记忆…是的,这就是我想的,我想我应该尽快提出来。是的,这也行。我当时是先这么做的,但考虑到使用协议避免了子类的重复。它看起来不太面向对象。为了更清楚,我将再次编辑这个问题。非常感谢您的意见,再次表示感谢。