2

UIButtonから次のUITtableviewcontrollerに文字列を送信します。文字列はUIButtonタイトル(月曜日...日曜日)であり、NSPredicateがテーブル情報を日ごとにフィルタリングするために使用します。

@property (nonatomic, weak) NSString *dayOTW;

- (IBAction)selectDay:(UIButton *)sender {
UIButton *dayW = sender;
dayOTW = dayW.titleLabel.text;
NSLog(@"button press = %@", dayOTW);
}

2012-05-01 06:23:21.731 passingdata[99957:fb03] button press = Monday

そして私の次の画面にセグエ

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"SendWeekDay"])
{
    // Get reference to the destination view controller
    ViewController *vc = [segue destinationViewController];

    // Pass any objects to the view controller here, like...
    vc.dayOTW = dayOTW;
   }
}

初めてボタンを選択したとき、テーブルに情報が表示されません。戻ってボタンをもう一度選択すると、テーブルにその日の正しい情報が表示されます。

私が間違っていることは何ですか?

上記に関連するもう1つの質問。週の各日に7つのUIButtonがありますが、1つのセグエですべてのUIButtonからどのようにセグエできますか?

ありがとう

4

1 に答える 1

4

セグエはIBActionメソッドの前に呼び出されるため、最初にクリックしたときに変数は設定されません。

セグエがボタンに接続されている場合、それはsenderprepareForSegueにあるので、実際にはアクションメソッドは必要ありません。prepareForSegueでタイトルを取得するだけです。

UIButton *dayButton = (UIButton*)sender
vc.dayOTW = sender.titleLabel.text;

同じセグエをすべてのボタンに接続するには、各ボタンからCtrlキーを押しながらドラッグする必要がありますが、すべてのセグエに同じ識別子を指定します。これはストーリーボードでは厄介に見えるので、別の方法として、ソースビューコントローラーから直接単一のセグエを作成し、アクションメソッド(この場合は必要であり、すべてのボタンに接続されます)で次のように呼び出しますperformSegueWithIdentifier:sender:

-(IBAction)dayButtonPressed:(UIButton*)sender
{
    [self performSegueWithIdentifier:@"SendWeekDay" sender:sender];    
}

これにより、ボタンが送信者としてメソッドに渡されるperformSegueため、上記のコードを使用できます。

于 2012-05-01T05:59:35.673 に答える