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