Az elmúlt időszakban nem jelentkeztem új bejegyzéssel, mivel gőzerővel folytak a munkálatok, hogy elköltözzek a blog.hu-s oldalról egy saját domain-ra. Ez sikeresen befejeződött, így ezentúl az iphonefejlesztes.com illetve az iphonefejlesztes.info oldalról érhetitek el a blogom.
A mai bejegyzésben megmutatom, hogy hogyan lehet egy UITableView-t létrehozni, és kezelni. Nagyon egyszerű kis bejegyzés lesz, azonban rendkívül hasznos tud majd lenni. A tableView-k nagy előnye, hogy pontosan annyi elemet tölt be a memóriába, amennyit meg is jelenít. Így nagy memóriaigényű feladatokat sokkal hatékonyabban lehet megjeleníteni vele, mintha más logikai módszerrel végeznénk a megjelenítést.
MusicTweeter – Mutsd meg, hogy mit hallgatsz!
Esetemben ezzel akkor szembesültem, mikor a Covers-t készítettem. Ott egy ScrollView-ba raktam a felolvasott borítókat a program elején. A gond csak az volt, hogy mivel kicsit bugzik a MusicLibrary, mindig lefoglalt 256kByte memóriát minden képhez, amit nem szabadított fel. Emiatt hamar elfogy a memória, a telefon meg kilépteti az iPod-ot a háttérben, így a musiclibrary kérések time out-olnak, és az egész úgy omlik össze, hogy csak szép nézni. Erről részletesebben a következő bejegyzésben fogok írni majd 18-a környékén (addig sajnos egyetem). De aki kíváncsi a jelenségre, még a Covers 1.0 illetve Covers Free 1.0 így működik (az 1.1 már jó rég elfogadás alatt áll, szóval hajrá a letöltéssel mert eltűnik végleg )!
Na de visszakanyarodva a TableView-khoz. Egy ismerősöm, Kamocsay Lajos (www.codza.com) segített ebben a memóriás problémában, és Ő ajánlotta a TableView-kat. A mai bejegyzésben
- Létrehozunk egy tableView-t
- Feltöltjük adatokkal, és
- Reagálunk az érintéseke.
A következő művelet a header fájlban lesz!
Implementálni kell a UITableViewDelegate UITableViewDataSource delegátokat, továbbá létre kell hozni egy NSArray-t. Az egész header fájl így fog kinézni:
@interface MusicAppViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
NSArray *listData;
}
@property (nonatomic,retain) NSArray *listData;
@end
- A viewDidLoad-ban inicializáljuk a tömböt
- Implementáljuk a numberOfRowsInSection, a cellForRowAtIndexPath illetve a didSelectRowAtIndexPath függvényt.
NSArray *array = [[NSArrayalloc] initWithObjects:@”Üdvözöllek”, @”a megújult”, @”oldalon”, nil];
self.listData = array;
[array release];
[superviewDidLoad];
-(NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
return [listDatacount];
}
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = [indexPath row];
static NSString *cellID = @”customCell”;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if(cell == nil)
{
cell = [[UITableViewCellalloc] initWithFrame:CGRectZeroreuseIdentifier:cellID];
}
[cell setText:[listDataobjectAtIndex:row]];
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = [indexPath row];
UIAlertView *tmp = [[UIAlertViewalloc] initWithTitle:@”TableView meg lett nyomkodva!”message:[NSStringstringWithFormat:@”Pontosan a(z) %d elem”,row] delegate:selfcancelButtonTitle:@”ok”otherButtonTitles:nil];
[tmp show];
[tmp release];
}
No comment yet, add your voice below!