Ho un'applicazione in Xcode 4.6 che utilizza gli storyboard. Ho aggiunto un UITableView a una classe di controller di visualizzazione, che ha funzionato come previsto. Tuttavia, quando ho provato a cancellare l'UITableView nello storyboard e l'aggiunta di nuovo nella stessa classe di programmazione, ho incontrato due problemi specifici:Creazione di UITableView a livello di programmazione
1) Anche se ho impostato il tipo UITableViewCell essere di tipo sottotitolo, l'etichetta dettaglio non appare più.
2) Il passaggio che deve verificarsi quando si seleziona una cella non si verifica e non viene neppure chiamato il seguito, a indicare che nessun messaggio viene inviato alla vista tabella quando viene selezionata una cella.
Ecco il codice rilevante:
@interface StatsTableViewController() <UITableViewDataSource, UITableViewDelegate>
@property (strong, nonatomic) UITableView *tableView;
@end
@implementation StatsTableViewController
-(UITableView *)makeTableView
{
CGFloat x = 0;
CGFloat y = 50;
CGFloat width = self.view.frame.size.width;
CGFloat height = self.view.frame.size.height - 50;
CGRect tableFrame = CGRectMake(x, y, width, height);
UITableView *tableView = [[UITableView alloc]initWithFrame:tableFrame style:UITableViewStylePlain];
tableView.rowHeight = 45;
tableView.sectionFooterHeight = 22;
tableView.sectionHeaderHeight = 22;
tableView.scrollEnabled = YES;
tableView.showsVerticalScrollIndicator = YES;
tableView.userInteractionEnabled = YES;
tableView.bounces = YES;
tableView.delegate = self;
tableView.dataSource = self;
return tableView;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView = [self makeTableView];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"newFriendCell"];
[self.view addSubview:self.tableView];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"newFriendCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil)
{
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
Friend *friend = [self.fetchedResultsController objectAtIndexPath:indexPath];
**//THIS DATA APPEARS**
cell.textLabel.text = friend.name;
cell.textLabel.font = [cell.textLabel.font fontWithSize:20];
cell.imageView.image = [UIImage imageNamed:@"icon57x57"];
**//THIS DATA DOES NOT APPEAR**
cell.detailTextLabel.text = [NSString stringWithFormat:@"%i Games", friend.gameCount];
cell.detailTextLabel.textColor = [UIColor lightGrayColor];
return cell;
}
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"detailsView" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
//I set the segue identifier in the interface builder
if ([segue.identifier isEqualToString:@"detailsView"])
{
NSLog(@"segue"); //check to see if method is called, it is NOT called upon cell touch
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
///more code to prepare next view controller....
}
}
io non sono sicuro di quello che sto dimenticando di fare in modo che possa risolvere questi due problemi. Qualsiasi aiuto è apprezzato.
cercare di definire l'altezza della cella. – iphonic
non è l'altezza della riga l'altezza della cella? lo ho impostato a 45 che dovrebbe essere più che sufficiente spazio ... – jac300
Oh sì, avrebbe funzionato, penso che tu abbia definito un metodo sbagliato, invece di disegnarlo dovrebbe essere fatto selezionare. – iphonic