0

ボタンを押すとポップするストーリーボードに日付ピッカーを使用してポップオーバーを作成しました。日付を選択して完了ボタンを押した後、日付を に送信する必要がありUIViewControllerます。

uipopover デリゲートの uidatepicker で説明されているように、プロトコルとデリゲート メソッドを設定しましたが、viewcontrollerのデリゲート メソッドが呼び出されません。何か不足していますか?これにはセグエを使用する必要がありますか?? 助けてください!!

- (IBAction)doneButtonPress:(UIBarButtonItem *)sender {
    NSLog(@"donebuttonpress");
    [_delegate receiveDate:pickedDate];
    NSLog(@"afterdelegation");
}

donebuttonpressとの両方afterdelegationが出力されますが、メソッドは呼び出されたことはありません:(

//selectDatePopover.h

#import <UIKit/UIKit.h>
@protocol selectDatePopoverDelegate <NSObject>
    - (void)receiveDate:(NSString *)theDate;
@end

@interface selectDatePopover : UIViewController{
    id <selectDatePopoverDelegate> delegate;
}

@property (nonatomic, assign) id < selectDatePopoverDelegate > delegate;
- (IBAction)doneButtonPress:(UIBarButtonItem *)sender;
- (IBAction)mydatepicker:(UIDatePicker *)sender;
@end

//selectDatePopover.m

- (IBAction)doneButtonPress:(UIBarButtonItem *)sender {
    NSLog(@"donebuttonpress");
    NSLog(_delegate);
    [_delegate receiveDate:pickedDate];
    NSLog(@"afterdelegation");
}

- (IBAction)mydatepicker:(UIDatePicker *)sender {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd"];
    pickedDate = [formatter stringFromDate:[sender date]];
    NSLog(pickedDate);
}

//CheckIn_ViewController.h

#import "selectDatePopover.h"
@interface CheckIn_ViewController : UIViewController <selectDatePopoverDelegate>
    @property UIPopoverController *popover;
@end

//CheckIn_ViewController.m

- (void)receiveDate:(NSString *)theDate {
    NSLog(@"backhere");
    dateLabel.Text = theDate;
}

//このボタンを押すと、ポップオーバーが表示されます:

- (IBAction)calendarbutton:(UIButton *)sender {
    UIView *anchor = sender;
    selectDatePopover *selectDatePopoverInstance =
    [self.storyboard instantiateViewControllerWithIdentifier:@"selectDatePopover"];
    _popover = [[UIPopoverController alloc] initWithContentViewController:selectDatePopoverInstance];
    [_popover presentPopoverFromRect:anchor.frame
                         inView:anchor.superview
       permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

    selectDatePopoverInstance.delegate = self;
}
4

1 に答える 1

1

この行: self.popover.delegate = self; 間違っています。デリゲート プロトコルは popover クラスではなく、そのコンテンツ ビュー コントローラー (selectDatePopover) にあります。したがって、その行を次のように変更します。

selectDatePopover.delegate = self;
于 2013-07-13T20:57:14.597 に答える