0

2 つのビュー間で整数を渡そうとしています。View1 から MainView に戻ると、値が渡されず、コンソールに NSLog(@"Changed map") が表示されません。答えを探してすべてを試しましたが、うまくいきません! デリゲートに何か問題があるように感じます...

何か案は?

View1.h

@class FlipsideViewController;

@protocol FlipsideViewControllerDelegate
    - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
    -(void)flipsideViewControllerSelectionChangedToIndex:(int)index;
    @end

@interface FlipsideViewController : UIViewController {
}

@property (weak, nonatomic) id <FlipsideViewControllerDelegate> delegate;
@property (nonatomic, retain) IBOutlet UISegmentedControl *mapType;

- (IBAction)valueChangedMap:(id)sender;

@end

View1.m

-(IBAction)valueChangedMap:(id)sender {
    [self.delegate flipsideViewControllerSelectionChangedToIndex:[sender selectedSegmentIndex]];
    NSLog (@"%d",[sender selectedSegmentIndex]);

    [self dismissViewControllerAnimated:YES completion:nil];
}

MainView.h

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate, UIPopoverControllerDelegate, MKMapViewDelegate> {}

@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@property(weak) id<FlipsideViewControllerDelegate> delegate;

@end

MainView.m

-(void)flipsideViewControllerSelectionChangedToIndex:(int)index {
    NSLog(@"Changed map");

    if (index == 0) mapView.mapType = MKMapTypeStandard;
    if (index == 1) mapView.mapType = MKMapTypeHybrid;
    if (index == 2) mapView.mapType = MKMapTypeSatellite;
}
4

1 に答える 1

0

view1 には実際のデリゲート プロパティのみが必要であり、mainView は単にそのデリゲート プロトコルに応答する必要があります。デリゲート プロトコルは次のようになります。

@property(nonatomic,unsafe_unretained) id delegate;

mainview が view1 を提示またはプッシュするとき、コードで次のようにデリゲートを接続する必要があります (疑似コード):

view1.delegate = self;

また、いくつかのちょっとした問題があります...ビューコントローラーがそれ自体を却下することは決してありません.mainViewは、「終了した」デリゲートメソッドが起動したときにview1を却下する必要があります。さらに、起動する前にデリゲートがセレクターに応答することを常に確認する必要があります。

if([self.delegate respondsToSelector:@selector(yourselectorname)]) {
    [self.delegate yourselectorname];
}
于 2012-12-15T05:12:00.187 に答える