2013-08-23 52 views
1

我正在使用IBAction按鈕打開地圖圖層。該代碼在輕按按鈕時將其打開。程序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。有人可以提供一些簡單的代碼來幫助我實現我的目標。在此先感謝您的時間。

回答

1

這個錯誤是因爲你正在給指針分配一個布爾值。指針不過是一個整數值,它將一個內存位置保存爲一個十六進制數字。

但實際上,要實現你想要的,你不需要一個指針,只需使用一個屬性來存儲這個布爾值並創建一個切換函數。

聲明這個私有財產:

@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:我只在這裏集中在解釋你現在得到的錯誤。此添加/刪除磁貼邏輯可能也是錯誤的。我想你仍然需要保存相同的引用來添加並稍後刪除。

+0

是的,我需要先修復我的removeTileSource調用,然後才能運行它。看起來是正確的,我會盡快跟進答案。 – user2621075

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; 

} 
+0

感謝您的回覆。我會盡快跟進答案。 – user2621075

+0

歡迎親愛的..... – Sabby

0

這是我去了。這是盧卡斯答案的微調。這將交替地關閉地圖。感謝您的迴應。

//.h 

@property BOOL *isChecked; 


//.m 

self.isChecked = !self.isChecked; 

if((self.isChecked)) { 

[_mapView addTileSource:onlineSource atIndex:1]; 

} else { 

[_mapView setHidden:YES forTileSourceAtIndex:1 ]; 
相關問題