【问题标题】:Program IBAction Button To Turn Map Layer ON/OFF编程 IBAction 按钮以打开/关闭地图层
【发布时间】:2013-08-23 02:14:25
【问题描述】:

我正在使用 IBAction 按钮打开地图图层。此代码在点击按钮时将其打开。

- (IBAction)lightingLayer:(id)sender {

[_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];

}

现在我想调整一下,当用户点击一次时,图层就会打开。当它再次被点击时,它会打开等等。我通过从类似示例中借用代码来尝试它,但它不起作用。

- (IBAction)lightingLayer:(id)sender {

_Bool *isON = NULL; 

isON = !isON;

if(isON) {

[_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];

} else {

[_mapView removeTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];

}

这个标志,不兼容的整数到从 int 分配 bool 的指针转换。有人可以提供一些简单的代码来帮助我实现我的目标。在此先感谢您的时间。

【问题讨论】:

    标签: ios objective-c if-statement ios6 logic


    【解决方案1】:

    此错误是因为您将布尔值分配给指针。指针只不过是一个整数值,它以十六进制数保存内存位置。

    但实际上,要完成你想要的,你不需要指针,只需使用一个属性来存储这个 bool 并创建一个切换功能。

    声明这个私有属性:

    @property (strong, assign) BOOL isChecked; 
    

    在你的行动中:

    - (IBAction)lightingLayer:(id)sender {
    
        self.isChecked = !self.isChecked;
    
        if(self.isChecked) {
    
            [_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];
    
        } else {
    
             [_mapView removeTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];
        }
    }
    

    Ps:我在这里只专注于解释您现在遇到的错误。这个添加/删除图块逻辑也可能是错误的。我认为您仍然必须保存相同的引用以添加和稍后删除。

    【讨论】:

    • 是的,我需要先修复我的 removeTileSource 调用,然后才能运行它。看起来是正确的,我会尽快跟进答案。
    【解决方案2】:

    这样做

    BOOL isON;
    - (IBAction)lightingLayer:(id)sender {
    if(isON) {
    
        [_mapView addTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];
        isON=NO;
    
    } else {
    
        [_mapView removeTileSource:[[RMMapBoxSource alloc] initWithMapID:@"MapID"]];
        isON=YES;
    
    }
    

    【讨论】:

    • 感谢您的回复。我会尽快回复。
    【解决方案3】:

    这就是我的选择。卢卡斯的回答略有调整。这将交替打开和关闭地图。感谢您的回复。

    //.h
    
    @property BOOL *isChecked;
    
    
    //.m
    
    self.isChecked = !self.isChecked;
    
    if((self.isChecked)) {
    
    [_mapView addTileSource:onlineSource atIndex:1];
    
    } else {
    
    [_mapView setHidden:YES forTileSourceAtIndex:1  ];
    

    【讨论】:

      猜你喜欢
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-21
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多