我有一个UIViewController
和一个UIContainer
视图。
我想模拟UIAlertView
效果,但我不知道如何构建容器视图节目并隐藏这个好方法。
我已将UITableView
放在UIContainer
视图中,我使用委托将所选项目发送到UIViewController
(ParentViewController
)并显示在标签中。(segue)名称为alertSegue
)
ParentViewController
中有一个显示按钮,我需要点击所选项目,它会关闭(隐藏/解除?)UIContainer
视图。
现在UIContainer
查看默认设置已隐藏,故事情节屏幕截图如下:
我的 ParentViewController.h
@interface ViewController : UIViewController<ContainerViewBLETableDelegate>
@property (weak, nonatomic) IBOutlet UIButton *btn;
- (IBAction)btnAction:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *lb;
@property (weak, nonatomic) IBOutlet UIView *containerView;
-(IBAction)unwindSegue:(UIStoryboardSegue *)segue;
@end
.m文件:
- (void)viewDidLoad {
[super viewDidLoad];
}
- (IBAction)btnAction:(id)sender {
_containerView.hidden = NO;
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if( [segue.identifier isEqualToString:@"alertSegue"])
{
ContainerViewBLETable *vc = segue.destinationViewController;
vc.delegate = self;
}
}
-(void) ContainerViewBLETable:(ContainerViewBLETable *)vc andSelectedDone:(NSString *)selectedStr
{
self.lb.text = selectedStr;
vc.view.hidden = YES;
}
-(IBAction)unwindSegue:(UIStoryboardSegue *)segue
{
}
Container ViewController .h:
@class ContainerViewBLETable;
@protocol ContainerViewBLETableDelegate <NSObject>
-(void) ContainerViewBLETable:(ContainerViewBLETable*)vc andSelectedDone:(NSString*)selectedStr;
@end
@interface ContainerViewBLETable : UIViewController<UITableViewDataSource,UITableViewDelegate>
@property(nonatomic,assign) id<ContainerViewBLETableDelegate>delegate;
@property (weak, nonatomic) IBOutlet UITableView *tableVW;
@end
UIContainerView .m部分:
.....
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.delegate ContainerViewBLETable:self andSelectedDone:[NSString stringWithFormat:@"%ld",indexPath.row]];
}
.....
虽然此代码可以将值传递给UIViewController
(ParentViewController
),但隐藏了UIContainer
视图,但是当我再次单击“显示”按钮时,它没有任何效果(我觉得容器视图重叠会导致触摸失效)。
(顺便说一下,我试过了
[self.parentViewController dismissViewControllerAnimated:YES completion:nil];
它不起作用)
问题:
如何隐藏容器视图使用委托并且可以再次触摸show button show container?
控制UIContainer
视图的好方法是在ParentViewController
和UIContainerView
中显示和消失?
我非常感谢大家,你可以帮助我,而不是更好。
答案 0 :(得分:0)
containerView
和show button
位于不同的viewControllers中。所以你不能只是隐藏它。实现目标的简单方法是在containerView
中选择单元格,显示ParentViewController
,ContainerViewController
中的视图将自动关闭。
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.delegate ContainerViewBLETable:self andSelectedDone:[NSString stringWithFormat:@"%ld",indexPath.row]];
ParentViewController *vc = [[self storyboard] instantiateViewControllerWithIdentifier:@"ParentViewController"];
[self presentViewController:vc animated:YES completion:nil];
}
要显示容器,您只需关闭呈现的ParentViewController
即可。
1.
- (IBAction)btnAction:(id)sender
{
[self.presentingViewController dismissModalViewControllerAnimated:YES];
}
或者 2.设置segue以解除viewController并使用prepareForSegue for delegate与其他viewController进行通信。
删除 vc.view.hidden = YES
您已实施的代理
-(void) ContainerViewBLETable:(ContainerViewBLETable *)vc andSelectedDone:(NSString *)selectedStr.