为自定义UIButton编码Popover segue

时间:2013-02-26 15:52:17

标签: iphone ios objective-c xcode ipad

我有一个自定义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吗?如果没有,我还有其他选择吗?

3 个答案:

答案 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)

  1. CTRL +从包含你的 ViewController中拖出一个segue 按钮 - > 您希望转到

  2. 的ViewController
  3. 为该segue确定一个标识符(只是一些唯一的字符串)( 选择segue后,打开右手" Utilities "侧边栏 并打开它" 属性检查员"标签

  4. 添加[self performSegueWithIdentifier:@"identifierStringYouSecifiedInStep2" sender:sender]; 在你的- (void)buttonTapped:(id)sender方法中! )

答案 2 :(得分:0)

在创建按钮的过程中,您将动作关联分配给名为buttonTapped:的方法,您可以从那里执行segue,如下所示:

- (void)buttonTapped:(id)sender
{
    [self performSegueWithIdentifier:@"theSegueIdentifier" sender:sender];
}