• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

custom tableviewCell

rooti

Golden Delicious
Registriert
13.10.09
Beiträge
6
im Anhang habe ich einen Screenshot aus den Einstellungen meines App. Nun möchte ich im App quasi genau das selbe realisieren - nur weiß ich nicht genau wie das gehen soll.
Ein Standartdesign für eine Zelle mit einem Label und einem Textfeld habe ich nicht gefunden.. also dachte ich, dass ich eine eigene Zelle gestalten muss..

nur das hat auch nicht geklappt (gab Probleme beim Einbinden des Nib).

aktuell versuche ich es mit einer abgewandelten Form des Sample-Codes von Apple... aber dabei bekomme ich das Custom-Cell nicht passend in den TableView:

Code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
	
    static NSString *CellIdentifier = @"ImageOnRightCell";
	
    UILabel *mainLabel, *secondLabel;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
		
        mainLabel = [[[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 220.0, 18.0)] autorelease];
        mainLabel.font = [UIFont systemFontOfSize:18.0];
        mainLabel.textAlignment = UITextAlignmentLeft;
        mainLabel.textColor = [UIColor blackColor];
        mainLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:mainLabel];
		
        secondLabel = [[[UILabel alloc] initWithFrame:CGRectMake(0.0, 20.0, 220.0, 25.0)] autorelease];
        secondLabel.font = [UIFont systemFontOfSize:12.0];
        secondLabel.textAlignment = UITextAlignmentRight;
        secondLabel.textColor = [UIColor darkGrayColor];
        secondLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:secondLabel];
    }
    mainLabel.text = @"Test";
    secondLabel.text = @"Test klein";
	
    return cell;
}
(bei dem Code sind es noch 2 Label - aber es geht mir eher auch allgemein um die Position)

kann mir da wer weiterhelfen?
 

Anhänge

  • Bildschirmfoto 2010-07-05 um 11.40.52.png
    Bildschirmfoto 2010-07-05 um 11.40.52.png
    15,4 KB · Aufrufe: 233
habe das optische nun inzwischen:
Code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
	
    static NSString *CellIdentifier = @"ImageOnRightCell";
	
    UILabel *mainLabel;
	UITextField *ownTextField;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
		
        mainLabel = [[[UILabel alloc] initWithFrame:CGRectMake(20, 13, 100.0, 18.0)] autorelease];
        mainLabel.font = [UIFont systemFontOfSize:13.0];
        mainLabel.textAlignment = UITextAlignmentLeft;
        mainLabel.textColor = [UIColor blackColor];
        mainLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:mainLabel];
		
        ownTextField = [[[UITextField alloc] initWithFrame:CGRectMake(135
																	  , 13, 100.0, 25.0)] autorelease];
        ownTextField.font = [UIFont systemFontOfSize:12.0];
        ownTextField.textAlignment = UITextAlignmentLeft;
        ownTextField.textColor = [UIColor darkGrayColor];
        ownTextField.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:ownTextField];
    }
	switch (indexPath.row) {
		case 0:
			mainLabel.text = @"Login Name";
			break;
		case 1:
			mainLabel.text = @"Login password";
			break;
		default:
			break;
	}
	
    return cell;
}

neue Frage ist aufgetaucht: wie kann ich nun die im "ownTextField" eingegebenen Daten empfangen? - normalerweise würde ich das ja mit einem Outlet machen, das im IB verbunden wird... nur da taucht es jetzt (dank codelösung) ja nicht auf..

und es sieht so aus, als ob das UITextFieldDelegate sich nicht angesprochen fühlt...
 
Am besten ist es, wenn du eine eigene Unterklasse von UICellView machst. Du kannst dir im IB ein schönes GUI dafür zusammenklicken. Das laden des views machst du am besten im Konstruktor der CellView:

Code:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        NSArray* nibObjects = [[NSBundle mainBundle] loadNibNamed:@"TextfieldCellView" owner:nil options:nil];
        for(id nibOb in nibObjects)
        {
            if([nibOb isKindOfClass:[TextfieldCellView class]])
            {
                self = (TextfieldCellView*)nibOb;
            }
        }
    }
    
    return self;
}