作者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