所以假设我有一个viewController
视图和一个弹出UITableView
表。
我希望能够通过从表中选择一个选项来更改调用弹出表的viewController
的背景视图。
所以我想做的是以下内容:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
int selectedEntry = indexPath.row;
switch(selectedEntry){
case 1:
//CODE TO CHANGE ORIGINAL VIEW TO IMAGE 1
case 2:
//CODE TO CHANGE ORIGINAL VIEW TO IMAGE 2
//etc
}
}
我已经知道如果我直接在基本视图类中编写方法,我可以写
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"IMAGE"]];
但是因为它是从弹出菜单中调用的,所以我不知道如何访问它。
答案 0 :(得分:0)
解决方案可能是在UIViewController
子类中为UITableView
添加属性,以便您可以保留对它的引用,然后再访问它:
@property (nonatomic, weak) MyViewController *parentVC;
(MyViewController
是您的UIViewController
子类)
当您从UITableView
初始化UIViewController
时,请将其parentVC
属性设置为self
。然后在didSelectRowAtIndexPath:
中,使用:
parentVC.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"IMAGE"]];
答案 1 :(得分:0)
当您单击弹出控制器中的按钮时,您可以使用委托来监听按钮操作并在视图控制器中执行此操作。或者,您可以使用NSNotification在按钮单击期间发布通知,并在视图控制器中收听通知。
在按钮操作
中写下此内容[[NSNotificationCenter defaultCenter] postNotificationName:UIButtonOneClickedNotification object:nil];
在视图控制器didLoad方法中写这个
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(buttonOneClicked:) name:UIButtonOneClickedNotification object:nil];
并在方法buttonOneClicked中执行您需要做的事情:
答案 2 :(得分:0)
您可以使用NSNotificationCenter
。
添加以下行。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
int selectedEntry = indexPath.row;
switch(selectedEntry){
case 1:
[[NSNotificationCenter defaultCenter] postNotificationName:@"ChangeBackground" object:self userInfo:yourData1];
case 2:
[[NSNotificationCenter defaultCenter] postNotificationName:@"ChangeBackground" object:self userInfo:yourData2];
//etc
}
}
将此添加到您要更改背景的BaseViewController
- (void)viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeBackgroundView:) name:@"ChangeBackground" object:nil];
}
- (void)changeBackgroundView:(NSNotification *)yourData {
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"IMAGE"]];
}
答案 3 :(得分:0)
通过使用协议你可以这样做 像AVC(aViewController)显示BVC(bviewcontroller)作为popover那么你需要做的是如下 在BVC.h
@protocol TablePopoverDelegate <NSObject>
-(void)doSomeWork;
@end
@property (nonatomic, weak) id<TablePopoverDelegate> delegate;
并且在BVC.m中你需要做的是
- (IBAction)buttoonpressd:(id)sender {
[self.delegate doSomeWork];
}
并且在AVC.h中你需要添加这个协议:“TablePopoverDelegate”
然后在AVC.m中你需要实现所需的功能 并设置委托 如下所示
从你出现popover的地方做这些东西
这里“按钮”是发送者,按下它你将显示popover
__weak UIViewController *selfView = self;
UIViewController *nextViewController;
UIViewController *infoViewController = [[UIViewController alloc] init];
infoViewController.delegate = self;
nextViewController = infoViewController;
_popOverController = [[UIPopoverController alloc] initWithContentViewController:nextViewController];
[self.popOverController setDelegate:self];
__weak UIPopoverController *blockPopoverController = self.popOverController;
self.popoverControllerPresentationBlock = ^(void){
[blockPopoverController presentPopoverFromRect:[button convertRect:button.bounds toView:selfView.view]
inView:selfView.view
permittedArrowDirections:UIPopoverArrowDirectionUp
animated:YES];
};
// invoke the presentation block to show the popover now
self.popoverControllerPresentationBlock();
以下是代理人正在调用的功能
-(void)doSomeWork
{
//do your stuff here
}