问题
I have a button in my view controller and I want to connect my button to table view controller (It means that when I click on button it loads and brings my table)
but I don't know how should I do that(I can connect my button to another view controller but not to the table ), here is my code
Thanks in advance!(I'm really beginner)
FirstViewController.h
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController
@end
FirstViewController.m
#import "FirstViewController.h"
@interface FirstViewController ()
@end
@implementation FirstViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
return YES;
}
}
@end
CreateViewController.h //my table
#import <UIKit/UIKit.h>
@interface CreateViewController : UIViewController <
UITableViewDataSource, UITableViewDelegate>
{
NSArray *tableData;
}
@property (nonatomic, retain) NSArray *tableData;
@end
CreateViewController.m
#import "CreateViewController.h"
@implementation CreateViewController
@synthesize tableData;
#pragma mark - View lifecycle
- (void)viewDidLoad
{
tableData = [[NSArray alloc] initWithObjects:@"Johan", @"Paul",@"George",@"Ringo", nil];
[super viewDidLoad];
// Do any additional setup after loading the view.
}
#pragma mark - TableView Data Source methods
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [tableData count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = nil;
cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];
}
cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
return cell;
}
@end
Edit: I used story board
回答1:
I think the button is in FirstViewController. If it is then implement -(IBAction)clickButton and write code and connect it to your bottom in Interface Builder(If you use Interface Builder) . write createViewController
object and #import <CreateViewController.h>
in FirstViewController.h
In FirstViewController.h,
#import "CreateViewController.h"
@interface FirstViewController : UIViewController{
CreateViewController *createViewController;
}
-(IBAction)clickButton:(id)sender;
@end
In FirstViewController.m, you just add below method
-(IBAction)clickButton:(id)sender{
if (!createViewController) {
createViewController = [[CreateViewController alloc] initWithNibName:@"CreateViewController" bundle:nil];
}
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];
[self.navigationController pushViewController:createViewController animated:YES];
}
and in AppDelegate.h,
#import "FirstViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) FirstViewController *viewController;
@property (nonatomic, retain) UINavigationController *navControl;
@end
In AppDelegate.m,
@synthesize window;
@synthesize viewController;
@synthesize navControl;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];
navControl = [[UINavigationController alloc] initWithRootViewController:self.viewController];
[self.window addSubview:[navControl view]];
[self.window makeKeyAndVisible];
return YES;
}
回答2:
FirstViewController.h
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController
<UITableViewDataSource,UITableViewDelegate>
{
UITableView *maintableView;
NSArray *tableData;
}
@property (nonatomic,retain)IBOutlet UITableView *maintableView;
-(IBAction)click;
@end
FirstViewController.m
#import "FirstViewController.h"
@implementation FirstViewController
@synthesise maintableView;
- (void)viewDidLoad
{
[maintableView setHidden : YES];
[super viewDidLoad];
}
- (void)viewDidUnload
{
[super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
else
{
return YES;
}
-(IBAction)click
{
[maintableView setHidden : NO];
tableData = [[NSArray alloc] initWithObjects:@"Johan", @"Paul",@"George",@"Ringo", nil];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [tableData count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = nil;
cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];
}
cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
return cell;
}
}
@end
回答3:
Don't put your code of UITableView in viewDidLoad () method..
create one button and show it on load time...On button's action method show the table and load the data...
If you can't get tha ask me....I will love to help you
回答4:
In the first view ,Create one buton named btn1.
set it on the top of simulator screen.
Now take tableview from object library. put it under the button.....
Now in load time make the table hidden....
Write [tablename sethidden: YES]
Now, on button's action method , [tablename sethdden : NO]
tableData = [[NSArray alloc] initWithObjects:@"Johan", @"Paul",@"George",@"Ringo", nil];
Then write all the methods required for table:
three methods are must :
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
-(void)tableView:(UITableView *) tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Try this....and let me know if something query occur
回答5:
as you said storyboard :
First go through the iphone story board and create your view then add your button
after that
- drag and drap your table view
- connect your button to the table view with module -click on table and from the menu choose-->editor-->embed in --> and add Navigation controller
with this process you can easily have your GUI demo without writing the code and then you should create the TableViewController file and add your code ,
just don't forget --> when you finished the GUI part and code, you should add createViewController class to your GUI via object in custom class.
hope this helps!
来源:https://stackoverflow.com/questions/10296573/connect-button-to-tableviewcontroller-in-xcode