Chcę zadać pytanie dotyczące UITableView celu C. Piszę program i chciałbym programowo utworzyć interfejs użytkownika. Jednak nie wiem, jak wyświetlić tabelę programowo. Mam już NSMutableArray do przechowywania wyświetlanych danych. I tworzę obiekt UITableView *tableData;
, co powinienem zrobić w następnym kroku? Dziękuję Ci bardzo.Jak programowo wyświetlić widok UITableView?
Odpowiedz
po napisaniu powyższego kodu należy wdrożyć metodę delegowania UITableView.
to metoda delegat obciążenia UITableView
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [your array count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
cell.textLabel.text = [yourarray objectAtIndex:indexPath.row];
return cell;
}
Coś takiego powinno wystarczyć (zakładając, że to działa z poziomu kontrolera widoku i trzeba właściwość skonfigurować dla widoku tabeli):
tableView = [[[UITableView alloc] initWithFrame:CGRectMake(...) style:UITableViewStylePlain] autorelease];
tableView.dataSource = self;
tableView.delegate = self;
[self.view addSubview:tableView];
Gdzie zastąpić CGRectMake(...)
z jakiegokolwiek położenia/wielkości polubiłbyś.
dziękuję za odpowiedź. Ale chcę zapytać, gdzie powinienem umieścić NSMutableArray? Dziękuję Ci. – Questions
Można przechowywać tablicę w kontrolerze widoku i używać jej w metodach UITableViewDataSource. Na przykład zwrócisz długość tablicy w tableView: numberOfRowsInSection :. –
dziękuję za odpowiedź. Ponieważ interfejs zawiera inne elementy, dodaję UITableView jako część z nich. I nie wiem, jak wywołać UITableDataSource, ponieważ klasa nie jest klasą widoku tabeli podczas jej tworzenia. Czy mógłbyś mi powiedzieć, jak zaimportować lub dodać dane do tablicy? Dziękuję Ci. – Questions
- utworzyć nową klasę, która dziedziczy z UIViewController.
- Sprawdź, czy jest zgodny z protokołem UITableViewDataSource.
- Zadeklaruj swój widok tabeli.
Plik nagłówka powinno być tak:
@interface MyViewController : UIViewController <UITableViewDataSource> {
}
@property (nonatomic, retain) UITableView *tableView;
@end
W metodzie viewLoad swojej klasie:
- Tworzenie widoku tabeli używając initWithFrame. Użyj wymiarów 320 x 460 dla pełnej wysokości. Usuń 44 z wysokości, jeśli masz pasek nawigacyjny i 49, jeśli masz pasek kart.
- Utwórz nowy widok.
- Dodaj widok tabeli do nowego widoku.
- Skonfiguruj widok kontrolera do nowego widoku.
- Ustaw źródło danych widoku tabeli na instancję (self).
- Wdrożenie dwóch wymaganych metod źródło danych: Tableview: cellForRowAtIndexPath i tableView: numberOfRowsInSection
plik realizacja powinna być jak następuje:
#import "MyViewController.h"
@implementation MyViewController
@synthesize tableView=_tableView;
- (void)dealloc
{
[_tableView release];
[super dealloc];
}
#pragma mark - View lifecycle
- (void)loadView
{
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 460.0) style:UITableViewStylePlain];
self.tableView = tableView;
[tableView release];
UIView *view = [[UIView alloc] init];
[view addSubview:self.tableView];
self.view = view;
[view release];
self.tableView.dataSource = self;
}
- (void)viewDidUnload {
self.tableView = nil;
[super viewDidUnload];
}
#pragma mark - Table view data source
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyCellIdentifier = @"MyCellIdentifier";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:MyCellIdentifier];
if(cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyCellIdentifier] autorelease];
}
return cell;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 5;
}
@end
Może jej również pomocne dla was wszystkich, którzy nowego w tam.
- (void)viewDidLoad
{
[super viewDidLoad];
// init table view
tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
//or, you may do that
//tableView = [[UITableView alloc] init];
//tableView.frame = CGRectMake:(5 , 5 , 320 , 300);
// must set delegate & dataSource, otherwise the the table will be empty and not responsive
tableView.delegate = self;
tableView.dataSource = self;
tableView.backgroundColor = [UIColor cyanColor];
// add to canvas
[self.view addSubview:tableView];
}
#pragma mark - UITableViewDataSource
// number of section(s), now I assume there is only 1 section
- (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView
{
return 1;
}
// number of row in the section, I assume there is only 1 row
- (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
// the cell will be returned to the tableView
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"HistoryCell";
// Similar to UITableViewCell, but
JSCustomCell *cell = (JSCustomCell *)[theTableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[JSCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
// Just want to test, so I hardcode the data
cell.descriptionLabel.text = @"Testing";
return cell;
}
@end
dla nowych osób (mnie), aby skopiować/wkleić do ogólnej aplikacji, zmienić "JSCustomCell" na "UITableViewCell", zmienić "cell.descriptionLabel.text" na "cell.textLabel.text". return count twoich elementów tablicy dla "numberOfRowsInSection". przypomnienie, aby zadeklarować metody delegowania (myślę, że tak właśnie się nazywa) w pliku .h, '
dziękuję za odpowiedź. Ale nie używam klasy UIViewTable, po prostu używam prostej klasy. Czy możesz mi powiedzieć, jak dodać tablicę do komórki tabeli lub tabeli? Dziękuję Ci. – Questions
@MarkSiu nie ma potrzeby implementacji klasy UITableView wystarczy napisać kod, aby dodać UITableView w funkcji viewdidload, a powyżej trzech funkcji jego tabelę wyświetlania w widoku – priyanka
dziękuję za odpowiedź. Dodałem powyższe funkcje w klasie .m. Jednakże odkryłem, że te funkcje nie zostały wywołane przez UITableView. Kiedy wywoływane są funkcje? Dziękuję Ci. – Questions