看板 MacDev 關於我們 聯絡資訊
各位好 請問我在一個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
sorkayi:你可以把 parent 丟給 subview 去用嗎 04/26 01:34
darktt:檢查看看 subview 的記憶體位置是否改變了 04/26 06:51
darktt:我的測試是任一 view 不管底下有沒有其他 view 都能夠 04/26 06:52
darktt:removeFromeSuperview 04/26 06:52
xmax7:subview給tag值去當指標來remove? 04/26 09:20
HellCloud:我猜是subview只有宣告沒有實作.. 04/26 10:52
感謝 darktt 我檢查之後發現真的是記憶體位置不同所引起的 檢查的結果是因為我的 subview 是由 gasturerecognizer 呼叫建立的 後來解決方法是當只有在 statebegan 時才建立 subview 其他 state 接直接 return 不做動作 這樣就可以把 subview 關掉了 目前是用這種方式解決 不知道是否還有其他方法可以運用? ※ 編輯: BFZSA 來自: 219.85.8.112 (04/27 00:21)
naboo:我的做法會是寫一個subview的getter,裡面會去檢查subview 04/27 03:36
naboo:是不是nil,不是的話再alloc,這樣就不會重複alloc而蓋掉 04/27 03:37
naboo:原來的,可以參考看看,不過不確定這是不是好方法 @@" 04/27 03:39
BFZSA:我也有做一個getter防止重複alloc 只是在gasturerecognizer 04/28 00:45
BFZSA:運作時會一直去取用那個getter 所以我後來再加上以state來 04/28 00:47
BFZSA:判斷 畢竟我需要的只有gasturerecognizer 一開始的狀態而已 04/28 00:49
BFZSA:謝謝各位給的意見 04/28 00:51