Reputation: 103
I've been searching all throughout the internet for assistance, however there has been little to no solutions to my issue at hand. My project that im trying to get a gasp on is somewhat unique (UI is not exactly following the typical norms).
Current Development Enviroment:
Below is a diagram of what i am trying to accomplish -- all within a UIView Controller:
Im sure experienced developers are fully aware of my issue, and or what im about to ask. I understand that a static UITableView is required to be in a tableview controller, but I need to display both the UItableView's at the same time which means it has to be within a UIView.
I can make the interface look the way I need it to through the IB however when trying to compile and build I receive the error that requires the UITableView's to be within a UITableViewController and not a UIView Controller. I have seen many examples using a master-detail layout, but the only stipulation is that this UITableview NEEDS to be displayed 100% of the time when in this view.
So basically, I am asking for direction... but a code example never hurt either! Thank you 100x's over!
-Jonathan
Upvotes: 2
Views: 2292
Reputation: 32681
UITableViewController
is just a specialized UIViewController
specially designed to display full screen UITableView
s. It is (quite) equivalent to use an UITableViewController
subclass or an UIViewController <UITableViewDataSource, UITableViewDelegate>
subclass to manage a tableview.
So even if UITableViewController
has some more spiecialized behaviors (automatically creates the UITableView if it does not exists, scrolls it automatically to display the keyboard, sets itself as the delegate
and dataSource
of the unique UITableView
it manages, etc), you can use a standard UIViewController
to manage a UITableView
and be its dataSource
to fill it.
That's even a way to manage a tableview that is not taking the full screen (as UITableViewController
expects its view
property to directly be the UITableView
it manages, not a subview of its main view or whatever, and thus expects the UITableView
to take the whole screen, contrary to using an UIViewController
that has an UITableView
as a custom-sized subclass of its view
)
So in your case, you can have an UIViewController
that has two IBOutlets
, one for each tableView
, and that unique UIViewController
can be the dataSource
(and delegate
) of both the UITableViews
. That's not a problem. Just be careful then in your datasource methods to distinguish if you are returning data for the first or the second UITableView
to feed the correct tables each time.
@interface MyViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, retain) IBOutlet UITableView* masterTableView;
@property (nonatomic, retain) IBOutlet UITableView* detailsTableView;
@end
@implementation MyViewController
@synthesize masterTableView = _masterTableView;
@synthesize detailsTableView = _detailsTableView;
// Proper memory mgmt not shown here:
// - don't forget to set self.masterTableView and self.detailsTableView to nil in viewDidUnload
// - and to release _masterTableView and _detailsTableView in your dealloc method
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
UITableViewCell* cell;
if (tableView == self.masterTableView)
{
static NSString* kMasterCellIdentifier = @"MasterCell";
cell = [tableView dequeueReusableCellWithIdentifier:kMasterCellIdentifier];
if (!cell)
{
cell = [[[UITableViewCell alloc] initWithReuseIdentiier:kMasterCellidentifier] autorelease];
// do some configuration common to all your master cells
}
// configure the rest of your cell for each property that is different from one cell to another
}
else if (tableView == self.detailsTableView)
{
// Do exactly the same principle, but for the cells of your "details" TableView
}
return cell;
}
Upvotes: 5