3

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];

その結果、Interface Builder には表示されず、アプリを実行したときにのみ画面に表示されます。これは、ctrl +UIButtonから aにドラッグしViewControllerてポップオーバー セグエを選択できないことを意味します。コード内でセグエを呼び出すことはできますか? そうでない場合、他に選択肢はありますか?

4

3 に答える 3

6

ポップオーバー セグエは、セグエを作成するときにストーリーボードにアンカー ビューを表示することを主張するため、Bub と tkanzakic の回答はうまく機能しません。そして、あなたのボタンはまだ存在していないので、それを正しくするのは難しいでしょう. 既存のストーリーボード ビューにアンカーすることはできますが、ポップオーバーの矢印は、ポップオーバーしたときに正しいオブジェクトを指しません。コードで作成されたボタンの四角形に一致するように、コード内でその既存のビューを移動できます。ただし、セグエを完全に省略して、コードでポップオーバーを実行することもできます。

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"];

関連するView Controllerがストーリーボードで選択されている場合、Identity Inspectorを使用してストーリーボード識別子を設定できます。

于 2013-02-26T16:36:18.547 に答える
0

ボタンを作成する過程で、というメソッドに関連付けられたアクションをボタンに割り当てます。buttonTapped:そこから、次のようなセグエを実行できます。

- (void)buttonTapped:(id)sender
{
    [self performSegueWithIdentifier:@"theSegueIdentifier" sender:sender];
}
于 2013-02-26T16:04:59.537 に答える
0
  1. CTRL + セグエをボタンを含む ViewControllerからドラッグします-->セグエしたい ViewController

  2. そのセグエの識別子(一意の文字列のみ)を指定します(セグエを選択した状態で、右側の「ユーティリティ」サイドバーを開き、「属性インスペクター」タブを開きます

  3. [self performSegueWithIdentifier:@"identifierStringYouSecifiedInStep2" sender:sender]; メソッド内に追加してください- (void)buttonTapped:(id)sender!)

于 2013-02-26T16:02:45.870 に答える