Kit*_*ito 1 delegation ios respondstoselector
我试图在两个Viewcontrollers之间使用委托,但不幸的是我的代表没有被解雇.我希望有人可以帮我解决问题.我有一个名为MapBackgroundViewController的ViewContoller和一个名为MapsViewController的ViewContoller.如果MapsBackgroundViewController的SegmentedControl发生更改,则应通知MapsViewController.(我实际上尝试在iPhone上使用地面卷曲实现类似地图应用程序的东西)
这是我的代码的一部分:
MapBackgroundViewController.h
@protocol ChangeMapTyp <NSObject>
@required
- (void)segmentedControllChangedMapType:(MKMapType) type ;
@end
@interface MapBackgroundViewController : UIViewController{
IBOutlet UISegmentedControl *segmentedControl;
MKMapType mapType;
id < ChangeMapTyp> delegate;
}
@property IBOutlet UISegmentedControl *segmentedControl;
@property MKMapType mapType;
@property(strong)id delegate;
- (IBAction)segmentedControllChanged:(id)sender;
Run Code Online (Sandbox Code Playgroud)
MapBackgroundViewController.m
@interface MapBackgroundViewController ()
@end
@implementation MapBackgroundViewController
@synthesize segmentedControl, mapType, delegate;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self setDelegate:self];
NSLog(@"%@",self.delegate);
}
- (IBAction)segmentedControllChanged:(id)sender {
if (segmentedControl.selectedSegmentIndex == 0) {
mapType = MKMapTypeStandard;
}else if (segmentedControl.selectedSegmentIndex == 1) {
mapType = MKMapTypeSatellite;
} else if (segmentedControl.selectedSegmentIndex == 2) {
// [self.delegate setMapType:MKMapTypeHybrid];
mapType = MKMapTypeHybrid;
}
//Is anyone listening
NSLog(@"%@",self.delegate);
if([self.delegate respondsToSelector:@selector(segmentedControllChangedMapType:)])
{
//send the delegate function with the amount entered by the user
[self.delegate segmentedControllChangedMapType:mapType];
}
[self dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
MapsViewController.h
#import "MapBackgroundViewController.h"
@class MapBackgroundViewController;
@interface MapsViewController : UIViewController<MKMapViewDelegate,
UISearchBarDelegate, ChangeMapTyp >{
IBOutlet MKMapView *map;
}
@property (nonatomic, retain) IBOutlet MKMapView *map;
@end
Run Code Online (Sandbox Code Playgroud)
MapsViewController.m(以下方法由于某种原因从未调用过)
- (void)segmentedControllChangedMapType: (MKMapType) type{
map.mapType = type;
}
Run Code Online (Sandbox Code Playgroud)
在MapBackgroundViewController您已设置的delegate属性self,所以委托是self- ( MapBackgroundViewController),所以当您执行检查if([self.delegate respondsToSelector:@selector(segmentedControllChangedMapType:)])它返回NO,因为self.delegate(这是self,这是MapBackgroundViewController),未实现此方法.如果您希望自己MapsViewController成为委托人,MapBackgroundViewController那么您必须拥有MapsViewController(例如,调用myMapsViewController)实例,然后设置self.delegate = myMapsViewController.
| 归档时间: |
|
| 查看次数: |
2370 次 |
| 最近记录: |