程序IBAction按钮打开/关闭地图图层

时间:2013-08-23 02:14:26

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

我正在使用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。有人可以提供一些简单的代码来帮助我实现目标。在此先感谢您的时间。

3 个答案:

答案 0 :(得分:1)

这个错误是因为你要为指针分配一个bool值。指针只是一个整数值,它将内存位置保存为十六进制数。

但实际上,为了达到你想要的效果,你不需要指针,只需使用一个属性来存储这个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:我只关注这里解释你现在得到的错误。这个添加/删除磁贴逻辑也可能是错误的。我认为您仍然需要保存相同的引用才能添加并稍后删除。

答案 1 :(得分:1)

这样做

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;

}

答案 2 :(得分:0)

这就是我的用途。卢卡斯的回答略有调整。这将交替关闭地图。感谢您的回复。

//.h

@property BOOL *isChecked;


//.m

self.isChecked = !self.isChecked;

if((self.isChecked)) {

[_mapView addTileSource:onlineSource atIndex:1];

} else {

[_mapView setHidden:YES forTileSourceAtIndex:1  ];