Ios 如何通过按子视图中的按钮删除以编程方式创建的子视图
我目前有一个芭比纽扣:Ios 如何通过按子视图中的按钮删除以编程方式创建的子视图,ios,Ios,我目前有一个芭比纽扣: UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneDate:)]; 它呼吁采取以下行动: - (IBAction)doneDate:(id)sender{ [self removeDateView] } 它调用以下方法: - (vo
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(doneDate:)];
它呼吁采取以下行动:
- (IBAction)doneDate:(id)sender{
[self removeDateView]
}
它调用以下方法:
- (void)removeDateView{
NSLog(@"subviews of view3.view: %@",self.View3.subviews);
[self.View3.subviews. makeObjectsPerformSelector: @selector(removeFromSuperview)];
}
我试图删除的子视图是
UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44.0 + 210)];
目前,它只是删除了该视图中的所有内容,我似乎无法删除名为containerView的视图,该视图具有日期选择器和工具栏。set标记将删除该视图
UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44.0 + 210)];
[containerView setTag:100];
找到它并从SuperView中移除
for (UIView* view in self.View3.subviews) {
if ([view isKindOfClass:[UIView class]] && view.tag == 100) {
[view removeFromSuperview];
}
}
正如erhnby所说,您可以使用标记,这是一种很好的方法,但我总是尽量避免在视图的子视图中循环。就我个人而言,我认为你要删除一个实例变量,当你想删除它,你可以直接调用删除它。。。刚才举了一个简单的例子: .h文件:
#import <UIKit/UIKit.h>
@interface TestViewController : UIViewController {
UIView *_containerView;
}
@end
结果如下:
按下按钮
(很抱歉,没有意识到白色对白色会很难看到)为包含日期选择器和工具栏的视图设置标记,然后使用viewWithTag方法和指定的标记获取此视图。然后将其从超级视图中删除。它似乎不起作用,可以按下“完成”按钮,但什么也没有发生。NSLog(@“view3.view的子视图:%@”,self.view3.subview);我认为问题在于,子视图只返回“即时”视图,我假设这些视图已经出现在我的故事板上。我认为这是一个问题,因为我的视图是通过编程创建的,不是即时的?self.view3有子视图?NSLog显示view3.subviews返回-它们对于我的故事板上的对象都是正确的,但是对于我以编程方式添加的视图则不正确使用错误的内容。为什么要遍历子视图?啊,我明白了,你让它很容易理解,谢谢。希望我能正确实施。如果你需要帮助,请告诉我!我添加了[self.view addSubview:_containerView],子视图现在正在NSLog中注册;但当文本字段的输入视图被按下时,它是在viewDidLoad中加载的,而不是作为子视图加载的。您正在记录什么?您在self'view中添加了_containerView,但您正在打印self'View3'的子视图。是吗?
#import "TestViewController.h"
@interface TestViewController ()
@end
@implementation TestViewController
- (id)init {
self = [super init];
// create the bar button and set it as the right bar button on the navigation bar
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(removeDoneDate)];
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// create the container view and add it as a subview
_containerView = [[UIView alloc] initWithFrame:CGRectMake(20, 100, 100, 100)];
_containerView.backgroundColor = [UIColor redColor];
[self.view addSubview:_containerView];
}
- (void)removeDoneDate {
// remove it
[_containerView removeFromSuperview];
}
@end