我有一个自定义UIButton
我以编程方式定义了这样:
self.hard1 = [UIButton buttonWithType:UIButtonTypeCustom];
[self.hard1 setFrame:CGRectMake(884, 524, 105, 60)]; // set the x,y,width and height
UIImage *buttonImage = [UIImage imageNamed:@"green.jpg"];
self.hard1.layer.cornerRadius = 10;
self.hard1.clipsToBounds = YES;
[self.hard1 addTarget: self
action: @selector(buttonTapped:)
forControlEvents: UIControlEventTouchUpInside];
[self.hard1 setImage:buttonImage forState:UIControlStateNormal];
[self.view addSubview:self.hard1];
因此,它不会在界面生成器中显示,它只会在我运行应用程序时显示在屏幕上。这意味着我无法从UIButton
ctrl +拖动到ViewController
以选择popover segue。我可以在我的代码中调用segue吗?如果没有,我还有其他选择吗?
答案 0 :(得分:6)
Blub和tkanzakic的答案不会很有效,因为当你创建segue时,popover segue坚持在故事板中有一个锚视图。而且由于你的按钮还不存在,要做到这一点将会非常棘手。您可以锚定到现有的故事板视图,但弹出箭头在弹出时不会指向右侧对象。您可以在代码中移动现有视图以匹配代码创建按钮的矩形。但你可以完全免除segue并在代码中执行popover。
您需要声明一个popoverController属性:
@property (nonatomic, strong) UIPopoverController* buttonPopoverController;
然后您的按钮操作可能如下所示:
- (void) buttonTapped:(UIButton*) sender
{
ContentViewController* contentVC = [[ContentViewController alloc] init];
self.buttonPopoverController = [[UIPopoverController alloc]
initWithContentViewController:contentVC];
self.buttonPopoverController.delegate = self;
//only required if using delegate methods
[self.buttonPopoverController presentPopoverFromRect:sender.frame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
ContentViewController是您打算转向的视图控制器。如果使用故事板场景配置它,您可能希望在创建它时执行以下操作:
UIStoryboard *storyboard = self.storyboard;
ContentViewController* contentVC =
[storyboard instantiateViewControllerWithIdentifier:@"ContentViewController"];
如果在故事板中选择了相关的视图控制器,则可以使用Identity Inspector设置故事板标识符。
答案 1 :(得分:0)
CTRL +从包含你的 ViewController中拖出一个segue 按钮 - > 您希望转到
为该segue确定一个标识符(只是一些唯一的字符串)( 选择segue后,打开右手" Utilities "侧边栏 并打开它" 属性检查员"标签
添加[self
performSegueWithIdentifier:@"identifierStringYouSecifiedInStep2" sender:sender];
在你的- (void)buttonTapped:(id)sender
方法中! )
答案 2 :(得分:0)
在创建按钮的过程中,您将动作关联分配给名为buttonTapped:
的方法,您可以从那里执行segue,如下所示:
- (void)buttonTapped:(id)sender
{
[self performSegueWithIdentifier:@"theSegueIdentifier" sender:sender];
}