作者BFZSA ()
看板MacDev
標題[問題] 關於移除subview
時間Fri Apr 26 00:56:01 2013
各位好
請問我在一個single view上添加了一個新的subview
並且在subview上添加一個navigation bar 和一個 bar button
我想運用此 bar button關閉這個 subview
以下附上簡略的code
@property (nonatomic, strong) UIView *subview;
@property (nonatomic, strong) UIBarButtonItem *doneButton;
...
{
...
[self.view addSubview:self.subview];
...
self.doneButton = [[UIButtonItem alloc]
initWithTitle:@"Done"
style:UIBarButtonItemStylePlain
target:self
action:@selector(back:)];
...
}
-(void)back:(id)sender
{
//方法1
[self.subview removeFromSuperview];
//方法2
for( UIView *view in [self.subview subviews] )
{
[view removeFromSuperview];
}
}
我用方法1都無法移除 subview 及上面的所有元件
而用方法2可以以除上面的元件 但是subview本身無法移除
方法2我可以理解,但是方法1為什麼無法運作
或是有什麼其他方法可以使用,再麻煩跟我說
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.8.112
1F:→ sorkayi:你可以把 parent 丟給 subview 去用嗎 04/26 01:34
2F:→ darktt:檢查看看 subview 的記憶體位置是否改變了 04/26 06:51
3F:→ darktt:我的測試是任一 view 不管底下有沒有其他 view 都能夠 04/26 06:52
4F:→ darktt:removeFromeSuperview 04/26 06:52
5F:→ xmax7:subview給tag值去當指標來remove? 04/26 09:20
6F:→ HellCloud:我猜是subview只有宣告沒有實作.. 04/26 10:52
感謝 darktt
我檢查之後發現真的是記憶體位置不同所引起的
檢查的結果是因為我的 subview 是由 gasturerecognizer 呼叫建立的
後來解決方法是當只有在 statebegan 時才建立 subview
其他 state 接直接 return 不做動作
這樣就可以把 subview 關掉了
目前是用這種方式解決
不知道是否還有其他方法可以運用?
※ 編輯: BFZSA 來自: 219.85.8.112 (04/27 00:21)
7F:推 naboo:我的做法會是寫一個subview的getter,裡面會去檢查subview 04/27 03:36
8F:→ naboo:是不是nil,不是的話再alloc,這樣就不會重複alloc而蓋掉 04/27 03:37
9F:→ naboo:原來的,可以參考看看,不過不確定這是不是好方法 @@" 04/27 03:39
10F:→ BFZSA:我也有做一個getter防止重複alloc 只是在gasturerecognizer 04/28 00:45
11F:→ BFZSA:運作時會一直去取用那個getter 所以我後來再加上以state來 04/28 00:47
12F:→ BFZSA:判斷 畢竟我需要的只有gasturerecognizer 一開始的狀態而已 04/28 00:49
13F:→ BFZSA:謝謝各位給的意見 04/28 00:51