【问题标题】:MapKit : the setSelected(_:animated:) not calledMapKit:未调用 setSelected(_:animated:)
【发布时间】:2022-08-24 09:02:33
【问题描述】:

在显示地图页面中,annotationview 是自定义的,我在实现中覆盖了setSelected(:) 方法。但是,当我单击 annotationView,该方法没有被调用。

- (void)setSelected:(BOOL)select {
    [super setSelected:select];  
  
    NSLog(@\"select:+++++ %d\", select);
}

NSLog 不打印,为什么?

    标签: ios mapkit selected


    【解决方案1】:

    直接解决方案

    如果您只想要一个直接的解决方案,这可能会有所帮助。

    - (void)setSelected:(BOOL)select { 
        [super setSelected:select animated:YES]
      
        NSLog(@"select:+++++ %d", select);
    }
    

    执行

    我在实现中覆盖了setSelected(_:animated:) 方法

    如果是这样,我认为你应该覆盖下面的方法而不是- (void)setSelected:(BOOL)select,这是二传手属性selected的方法。

    - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
        [super setSelected:selected animated:animated];
        .... // do your custom work
    }
    

    为什么以及如何

    经过大量测试,我发现Super Class必须实现这个

    - (void)setSelected:(BOOL)selected {
        
    }
    

    所以打电话给[super setSelected:select]你什么也得不到

    这很奇怪,但可能是合理的如果 Apple 不建议我们覆盖 selected's二传手- (void)setSelected:(BOOL)select 的方法已经完成了这项工作。

    如您所见,该方法存在于大部分 System Class 中。

    【讨论】:

    • 我觉得你是对的。我也注意到了这一点。不明白为什么之前的项目人员会覆盖- (void)setSelected:(BOOL)select这个方法。我认为这是错误的
    猜你喜欢
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多