我是iOS编程的新手,我遇到的问题是自定义委托存在问题。我试图做一个简单的自定义,它将数据返回到以前的视图控制器,并弹出当前的视图控制器。
我有2个导航视图控制器
1-主视图控制器2-添加
这是在添加视图控制器中编写的协议
@protocol AddingDelegate <NSObject>
@required
-(void)setInformation:(Adding *)controller withObject:(Conference *)info;
这是我在添加视图控制器中调用它的地方
-(IBAction)addingConference
{
NSLog(@"Adding Button Pressed");
conferenceObject = [[Conference alloc]init];
conferenceObject.name = [NameTX text];
conferenceObject.city = [CityTX text];
conferenceObject.description = [Dectription text];
NSMutableArray *info = [[NSMutableArray alloc] init];
[info addObject:conferenceObject];
[self.delegate setInformation:self withObject:conferenceObject];
NSLog(@"adding Conference method is done");
}
我在主视图控制器的接口上编写了委托
@interface MainViewController : UITableViewController <AddingDelegate>
@end
在这里我声明了委托方法
-(void)setInformation:(Adding *)controller withArray:(NSMutableArray *)info
{
NSLog(@"in the main view at the delegate");
[self.navigationController popToRootViewControllerAnimated:YES];
NSLog(@"Should be popped right now");
}
这是segue方法的准备
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"AddObject"]) {
UINavigationController *navigation = segue.destinationViewController;
Adding *addingViewController = [[navigation viewControllers]objectAtIndex:0];
addingViewController.delegate = self;
}
}
现在的问题是,当我将添加操作推到堆栈的顶部,然后填充信息并按完成时,添加视图控制器不会弹出以显示主视图控制器。
我试图记录所有内容,但主视图控制器的日志未显示。
请帮我
我在这里注意到的是,在prepareForSegue:sender:
segue的实现中destinationViewController
是导航控制器。这使我认为您的选择不是AddingController
在当前导航堆栈上推送,而是在显示一个新的导航堆栈。这意味着AddingController
将以模态方式显示包含的新导航控制器,因此,当您尝试弹出导航堆栈时,似乎没有发生任何事情,因为您对错误的导航堆栈进行了操作。如果是这种情况,您有两个选择:1.更改[self.navigationController popToRootViewControllerAnimated:YES];
为[self dismissViewControllerAnimated:YES completion:nil];
或2.将序列更改为推送序列而不是模式序列,并将序列直接指向AddingController
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句