Showing posts with label UITableView. Show all posts
Showing posts with label UITableView. Show all posts

Tuesday, August 16, 2011

UIButton(ok) elhelyezese UITableView aljan

Itt van 2 pelda. Az elsoben csak 1 UIButton-t teszek ki, a masodikban 3-at. Az elsoben csak a UITableView utolso sectionjenek footer-jebe teszem ki a gombokat. A masodikbol ezt kihagytam. Amikor csak 1 gomb van akkor eleg az AutoResizingMask-ot a Width-re allitani. 3 gomb eseten mar mindegyiket mashogy kell beallitani. Igy ha elforgatjuk a device-t (es persze a shouldAutorotateToInterfaceOrientation YES-t ad vissza), akkor megfeleloen lesznek atmeretezve a gombok.

1 gombosnal hibatlan, de 3 gombosnal az a kis hibaja van, hogy landscape mode-ban kicsit nagyobb lesz a tavolsag a gombok kozott mint portrait mode-ban.

Tuesday, July 12, 2011

nev-ertek megjelenitese UITableViewCell-ben

Kellett egy olyan UITableViewCell amiben nev-ertek parokat mutatok. Valamiert custom UITableViewCell-t csinaltam erre amibe tettem 2 UILabel-t ahelyett, hogy siman UITableViewCellStyleValue2-vel hoztam volna letre a cellakat. Most kijavitottam, de van par dolog amire itt is oda kell figyelni:

Az egyik dolog, hogy mivel a detailTextLabel-be esetleg tobb sornyi szoveg is kerulhet amit nem akarok trunc-olni ezert a cella magassagat be kell allitani (nem allitja magatol a device) valahogy igy:

- (CGFloat)tableView:(UITableView *)tableView_ heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat kMinCellHeight = 44.0;
NSString *text = ZXGetPropertyValueForRow([indexPath row]);
CGSize textSize = CGSizeMake(tableView_.frame.size.width - 120.0, FLT_MAX);
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:15.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
size.height += 25.0f;
return MAX(size.height, kMinCellHeight);
}

Azert hasznalom tableView.frame.size.width-120.0-at es nem a tobb helyen ajanlott 200.0f koruli ertekek valamelyiket, mert ez landscape modban is jo lesz. Ha a cella accessoryType-ja nem UITableViewCellAccessoryTypeNone hanem UITableViewCellAccessoryTypeDisclosureIndicator akkor inkabb -140.0-et kell hasznalni, mert a disclosureIndicator (>) elvesz 20 pixelt a detailTextView-tol. Ezek a 120.0-140.0-es ertekek csak hozzavetoleg jok. Azt meg nem sikerult kideriteni, hogy peldaul a Contacts App-ban ha felveszek egy tobb soros notes-ot akkor hogyan csinalja meg pontosan a cella magassagat. (Pedig ez lenne a lenyeg.)
A 25.0f-es ertek pedig ugy jott ki, hogy megneztem milyen magas a cella, ha nem varialok semmit es sorok_szama*19.0+25.0 jott ki azaz az egy soros ertekeknel 44.0f. Kivetel ez alol a Group-ok elso es utolso sora, ahol 45.0f-es a default magassag. (Csak Grouped Style-os UITableView-nal neztem ezeket az ertekeket.) Az elso es utolso sorok magassagat meg hiaba is allitottam 44.0-re, az minimum 45.0 lett.
A 15.0f-es meretet pedig a systemFontOfSize-nal pedig tobb helyen olvastam es probalgatassal nekem is ez jott ki.
Ahhoz persze, hogy tobb soros legyen a detailTextLabel meg be kellett allitani a numberOfLines-t 0-ra.


Egy masik problema volt, hogy a textLabel-be pont nem fert bele amit bele akartam irni. Eloszor azzal probalkoztam, hogy textLabel-en beallitom a betumeretet a setFont-tal ([[cell textLabel] setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];), de nem akartam azokat megvaltoztatni amik a default font-tal is elfernenek.
Egy masik megoldas, hogy textLabel-re is beallitjuk a numberOfLines-t mondjuk 0-ra, de mivel a textLabel es a detailTextLabel betumerete nem ugyanakkora ezert ha mindketto 2 soros akkor a masodik soruk el van csuszva egymastol ami eleg benan nez ki.
Vegul azt valasztottam (ami nem tul hosszu szovegeknel mukodik), hogy a numberOfLines-t hagytam a default 1-en (ez fontos!) es beallitottam a minimumFontSize-ot (ami a textLabel-nel kb 12) 10-re. Igy ami elozoleg pont nem fert bele azt meg beleferthet es nem is lesz tul csunya. Ehhez be kell allitani az adjustFontSizeToFitWidth-et is true-ra.
[[cell textLabel] setAdjustsFontSizeToFitWidth:true];
[[cell textLabel] setMinimumFontSize:10.0];

Tuesday, January 25, 2011

Csak az egyik cella ne legyen kijelolve touch-nal

Magan a UITableView-n bekapcsolhatjuk a "Show Selection On Touch"-ot az IB-ben, de ha az egyik cellanal megsem akarunk selection-t, akkor amikor azt letrehozzuk a tableView:cellForRowAtIndexPath:-ban akkor be kell allitani rajta a UITableViewCellSelectionStyleNone-t:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

Friday, September 10, 2010

Async kep betoltes UITableViewCell-be

Itt van az Apple peldakodja:
This sample demonstrates a multi-stage approach to loading and displaying a UITableView. It begins by loading the relevant text from an RSS feed so the table can load as quickly as possible, and then downloads the images for each row asynchronously so the UI is more responsive

vagy

Monday, March 29, 2010

Refresh UITableView UIActivityIndicatorView hasznalataval

Olyasmit akartam csinalni, mint a Mail app-ban, hogy egy refresh gomb megnyomasara elkezdporogni az UIActivityIndicatorView a toolbarban, majd amikor sikerult frissiteni a szerverrol akkor visszakerul a refresh gomb. (A Mail app-ban nem tunik el a refresh gomb, de nalam igen.)

A UIViewController toolBarItems-e egy NSArray amiben a UIView-k vannak. Ugy lehet ezeket egymastol egyenlo tavolsagra tenni, ha beteszunk kozejuk olyan UIBarButtonItem-eket amiket UIBarButtonSystemFlexibleSpace-kent inicializalunk.

Elsore ugy probaltam, hogy refreshButton push-aba akartam meghivni egymas utana toolbar atvaltoztatasat, a szerverrol valo adatlekerest es a toolbar visszavaltoztatasat, ami azert se volt jo megoldas, mert ez leblokkolta volna az alkalmazast es azert sem, mert igy nem valtozott a toobar sem. Ehelyett megvaltoztatom a toolbart es egy masik thread-ben kommunikalok a szerverrel majd frissitem a tableview-t es a toolbart.


Monday, January 4, 2010

UITableViewCell mozgatasa

Ha atvaltunk edit mode-ba, akkor meg nem tudjuk mozgatni a cellakat, ha nem implementaltuk (akar uresen) a tableView:moveRowAtIndexPath:toIndexPath methodot.

Ha nem akarjuk, hogy az osszes cella mozgathato legyen, akkor meg kell irni a tableView:canMoveRowAtIndexPath method-ot is.

Ha pedig nem szeretnenk, hogy akarhova at lehessen mozgatni akkor a tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath method-ot.

Monday, November 2, 2009

Button (vagy barmi mas) UITableView ala

Ugy szerettem volna gombokat elhelyezni egy UITableView ala, hogy azok egyutt scrollozzanak. Erre itt van egy megoldas: A tableView:viewForFooterInSection-ben kell visszaadni egy olyan UIView-t amiben letrehozunk egy UIButton-t, vagy amit szeretnenk. Fontos, hogy a tableView:heightForFooterInSection-ben olyan magassagot allitsunk be, amibe belefer majd a UIView-nk. Azt nem emlitik, de fontos lehet, hogy a tableView:viewForFooterInSection a UITableViewDelegate-ben van.
Ez meg itt egy masik pelda ugyenrre, csak UIButton helyett UISwitch.

Update: Multkor fejbol csinaltam es elfelejtettem, a tableView:heightForFooterInSection-t beallitani. Enelkul is lattam a footer view-ba pakolt gombokat, csak megnyomni nem lehetett oket.

Thursday, September 3, 2009

UITableViewCell beszurasa UITableView-ba

Igy szurunk be egy cellat a TableView elejere:

[self.tableView insertRowsAtIndexPaths:myObject withRowAnimation:UITableViewRowAnimationFade];


Igy pedig feltekerunk, hogy lassuk az uj cellat:

[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];


Wednesday, August 12, 2009

thumbnail betoltese UITableViewCell-be

Kell egy custom UITableViewCell aminek van egy UIImageView propertyje
pl.:

IBOutlet UIImageView *image;

...

@property (nonatomic, retain) IBOutlet UIImageView *image;


Es ebbe igy lehet betolteni egy kepet file-bol, ha tudjuk hol van:

NSString *filePath = ...;


[[cell image] setImage:[[UIImage alloc] initWithContentsOfFile:filePath]];


Thursday, July 9, 2009

UITableView

A header file-ban meg kell adni, hogy a Controller implementalja a UITableViewDataSource protokolt:

@interface TestViewController: UIViewController <UITableViewDataSource> {}

implementalni pedig a numberOfRowsInSection-t kell ami meghatarozza, hogy hany cella lesz a TableView-ban, illetve a cellForRowAtIndexPath-ot, ami kitolti a cellat.

Ha le akarjuk kezelni a cellara kattintast, akkor a UITableViewDeleagate protokollt is be kell venni az interface-be es ebbol a didSelectRowAtIndexPath-ot kell implementalni.