Mar*_*oni 4 objective-c parent-child uitableview ios segue
我有这个故事板:

当我按下第一个视图控制器中的"Insegnante"按钮(它被称为newCourseViewController)时,它会显示一个带有教师列表的表格视图.当我按下一个老师(并tableView:canEditRowAtIndexPath:调用该方法)时,我希望将UITableViewController按下的对象"传递"到第一个视图控制器.
这是我的第一个视图控制器newCourseViewController.h的代码
#import <UIKit/UIKit.h>
#import "Teacher.h"
@interface newCourseViewController : UIViewController
@property (nonatomic , strong) Teacher *teacher;
@end
Run Code Online (Sandbox Code Playgroud)
这是我的第一个视图控制器newCourseViewController.m的代码(只有重要的代码)
#import "newCourseViewController.h"
#import "Courses.h"
#import "Teacher.h"
#import "addTeacherToCourseViewController.h"
@interface newCourseViewController ()
@property (weak, nonatomic) IBOutlet UITextField *textField;
@end
@implementation newCourseViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)setTeacher:(Teacher *)teacher
{
self.teacher = teacher;
NSLog(@"Maestro settato!");
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"addTeacherToCourse"]) {
[segue.destinationViewController setPreviousViewController:self];
}
}
Run Code Online (Sandbox Code Playgroud)
现在是第二个视图控制器addTeacherToCourseViewController-h的代码
@interface addTeacherToCourseViewController : UITableViewController
@property (nonatomic , weak) id previousViewController;
@end
Run Code Online (Sandbox Code Playgroud)
和addTeacherToCourseViewController.m(只有重要的方法)
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
Teacher *teacher = [self.teachers getTeacherInPosition:indexPath.row];
[self.previousViewController setTeacher:teacher];
[self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
在方法的第一个视图控制器中,prepareForSegue我将自己设置previousViewController为第二个视图中的.然后我"通过"选择的老师,而不是我解雇第二个视图控制器.当应用程序执行[self.navigationController popViewControllerAnimated:YES];Xcode崩溃并且模拟器崩溃时.我无法弄清楚问题是什么.你能帮助我吗?
小智 5
要将值发送到父控制器,您必须使用协议.我将提供您应该采取的适当步骤,以使您所需的功能正常工作.
1.为AddTeacherToCourseController创建协议.在AddTeacherToCourseController.h中,在导入下面添加以下内容:
@protocol AddTeacherToCourseControllerProtocol <NSObject>
- (void)yourDelegateMethod:(Teacher *)insegnante;
@end
Run Code Online (Sandbox Code Playgroud)
并在接口标签下面添加:
@property (strong, nonatomic) id <AddTeacherToCourseControllerProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)
2.在AddTeacherToCourseController.m中:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// I would use the existing array you are using to display the teachers in order to select the correct one you want to send back like this:
// Teacher *teacher = [self.teachers getTeacherInPosition:indexPath.row];
[self.delegate yourDelegateMethod:[yourTeacherArray objectAtIndex:indexPath.row]];
}
Run Code Online (Sandbox Code Playgroud)
[此方法将通过协议调用您的委托方法,并将您选择的教授传递给父控制器]
3.在您的父控制器中,在接口行添加后立即使用newCourseViewController.h:
<AddTeacherToCourseControllerProtocol>
Run Code Online (Sandbox Code Playgroud)
4.如果您没有Insegnante按钮操作,请在界面构建器[拖动和命名]中创建一个.然后将以下内容添加到此操作:
// assuming your storyboard is named MainStoryboard. here you create your segue programmatically:
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
addTeacherToCourseViewController *addTeacherController = (addTeacherToCourseViewController *)[storyBoard instantiateViewControllerWithIdentifier:@"addTeacherToCourseViewController"];
addTeacherController.delegate = self;
[self.navigationController pushViewController:addTeacherController animated:YES];
Run Code Online (Sandbox Code Playgroud)
5.在Interface Builder中:
6.在newCourseViewController.h中编写你的委托方法:
- (void)yourDelegateMethod:(Teacher *)insegnante{
// Do whatever you want with your Insegnante
// and be sure to pop the second controller from the view stack:
[self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
如果您有疑问,如果我的答案对任何人都有帮助,请告诉我.
| 归档时间: |
|
| 查看次数: |
892 次 |
| 最近记录: |