问题
I'm new in iOS programming, and I want to do a simple thing. I saw several topics about my problem, but I don't understand why my code doesn't work...
- I created a UIViewController subclass called details2ViewController, with a .xib
- In my main view called ViewController.xib, I have a tableView
- In ViewController.m, I added on the top :
#import "details2ViewController.h"
In ViewController.m, I modified the didSelectRowAtIndexPath method like this :
details *det = [[details alloc] init]; [self.navigationController pushViewController:det animated:YES];
There is no warning, but no effect when I click on a cell... I precise that I'm working without mainStoryBoard.
note : Here's my previously post about this problem.
(Sorry if my english is awkward, I'm french... Thanks for your help !)
回答1:
First of all check that you have properly wired your TableView's delegate to your ViewController's File Owner or not. TableView's -didSelectRowAtIndexPath
method is a delegate method.
Secondly, I am not getting why are using details
as a Class name when you already have imported details2ViewController.h
. So, It looks like you should use details2ViewController
instead details
and your code should look like this :
details2ViewController *det = [[details2ViewController alloc] initWithNibName:@"details2ViewController" bundle:nil];
[self.navigationController pushViewController:det animated:YES];
Make sure that your ViewController
is indeed embedded in a UINavigationController
. If not then your self.navigationController will
be nil
.
Or you can go through An Introduction To UINavigationController.
回答2:
if you are using Storyboard you can use this code.
- (void)tableView:(UITableView *)atableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
YourViewController *yourViewController = [storyboard instantiateViewControllerWithIdentifier:@"StoryBoardID"];
[self.navigationController pushViewController:yourViewController animated:YES];
}
Don't forget to set animated:BOOL
to YES
in last line.
回答3:
You have to first define a property of navigation controller in your AppDelegate.h:
@property (strong, nonatomic) UINavigationController *controller;
Then in the AppDelegate.m file do this in the didFinishLaunchingWithOptions: method :
details2ViewController *controller=[[details2ViewController alloc] initWithNibName:@"details2ViewController" bundle:nil];
self.controller = [[UINavigationController alloc] initWithRootViewController:controller];
}
self.window.rootViewController=self.controller;
[self.window makeKeyAndVisible];
return YES;
Then in the details2ViewController.m in the didSelectRowAtIndexPath:
details2ViewController *det = [[details2ViewController alloc] initWithNibName:@"details2ViewController" bundle:nil];
[self.navigationController pushViewController:det animated:YES];
Do let me know if it work.. :) Thanks.
来源:https://stackoverflow.com/questions/18961798/make-a-link-for-each-uitableviewcell-with-another-view