2010-07-26 5 views
22

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

38

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; 

} 
+0

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

+0

@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

+0

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

43

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ś.

+0

dziękuję za odpowiedź. Ale chcę zapytać, gdzie powinienem umieścić NSMutableArray? Dziękuję Ci. – Questions

+0

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 :. –

+0

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

21
  • 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 
2

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 
+0

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ę Abhay) – tmr