UIPickerView: 2 oder mehr davon?

cropfaktor

cropfaktor

Aktives Mitglied
Thread Starter
Dabei seit
18.01.2008
Beiträge
1.148
Reaktionspunkte
119
Ja, ja, manchmal will man doch zwei von den Teilen und das Prinzip dahinter?
Code:
 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
return 1;
}

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
	
if (thePickerView == self.mypickerview1) {
		return [array1 count];
	}else{
                    if (thePickerView == self.mypickerview2) {
		return [array2 count];
                    }
	}
}

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
	
	if (thePickerView == self.mypickerview1) {		
		return [array1 objectAtIndex:row];
	}else {
                      if (thePickerView == self.mypickerview2) {
		return [array2 objectAtIndex:row];
                     }
	}
}

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
	if (thePickerView == self.mypickerview1) {
		NSLog(@"Herarchy:  Selected Item: %@. Index of selected item: %i",[array1 objectAtIndex:row],row);
	}else {
		if (thePickerView == self.mypickerview2) {
			NSLog(@"Domain:  Selected Item: %@. Index of selected item: %i",[array2 objectAtIndex:row],row);
		}
	}
	
}

Den Code kapiere ich bis auf eine Stelle "self.mypickerview2". Hübsch, der Outletname kann damit ja wohl nicht gemeint sein. Meine Outletnamen funktionieren nämlich alle nicht anstelle von "mypickerview2". Wo kommt das also her?

Ein Picker ist kein Problem:
Picker ins Window ziehen. Outlet definieren in der Headerdatei. Im Interfacebuilder Outlet mit Picker verknüpfen. Picker-Delegate mit App-Delegate verbinden und gut ist.

Aber der 2. Picker? Wo ist das Kriterium zur Unterscheidung? Stimmt, man soll ja auch ein Tag setzen können. Oops gibt es ja gar nicht.

Grübelnde Grüße und natürlich für Tipps empfänglicher
Andreas
 
Konnte nicht gehen, die eckigen Klammern haben gefehlt.

Geht aber trotzdem nicht, da nun die letzte Klammer moniert wird:
Code:
//UIPikerVIEW PROJEKTARTEN!
//So viele Elemente, wie oben in #define definiert
- (NSInteger)numberOfComponentsInPickerView:
(UIPickerView *)thePickerView {
    //Es wird nur eine Spalte gebraucht;
    return 1;
}


//So viele Zahlenwerte pro Segment, wie oben in #define definiert
- (NSInteger)pickerView:(UIPickerView *)thePickerView
numberOfRowsInComponent:(NSInteger)component {
    
    
    if([thePickerView isEqual:projektAuswahl ]){       
        //Die Anzahl der Zeilen richtet sich nach der Anzahl der Elemente
        //(= Projektarten) im Projektarten-Array
        return [projektArtenArray count];
    }
    else if([thePickerView isEqual:konzeptionStundenauswahl]){ 
        return  [stundenArray count];
    }
    
    else{
        return 0;
    }
}    
    

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
	
	if ([thePickerView isEqual:projektAuswahl]) {		
		return [projektArtenArray objectAtIndex:row];
	}else {
        if ([thePickerView isEqual:konzeptionStundenauswahl]) {
            return [stundenArray objectAtIndex:row];
        }
	}
}

"control may reach end of ..."

Tja, so viel zu den Beispielen.
 
Das stimmt doch auch.

Wenn Bedingung 1 oder Bedingung 2 nicht erfüllt sind, wie heißt dann der Rückgabewert?
Ich weiß es nicht und der Compiler auch nicht.

Du kannst am Ende "return nil;" oder einen leeren String zurückgeben. Dann ist das Problem einwandfrei gelöst.

Viele Grüße
 
  • Gefällt mir
Reaktionen: cropfaktor
Hi little_pixel

stimmt, aber es geht trotzdem nicht.
Der Code wird zwar nicht moniert, aber in dem Moment wo ich auch nur ein UIPickerView berühre, steigt mir das Programm mit der Fehlermeldung:

hier: " int retVal = UIApplicationMain(argc, argv, nil, nil);" mit EXC Bad Access aus.

Mein Code soweit:
Code:
//UIPikerVIEW PROJEKTARTEN!
- (NSInteger)numberOfComponentsInPickerView:
(UIPickerView *)thePickerView {
    //Es wird nur eine Spalte gebraucht;
    return 1;
}


- (NSInteger)pickerView:(UIPickerView *)thePickerView
numberOfRowsInComponent:(NSInteger)component {
    
    
    if([thePickerView isEqual:projektAuswahl ]){       
        //Die Anzahl der Zeilen richtet sich nach der Anzahl der Elemente
        //(= Projektarten) im Projektarten-Array
        return [projektArtenArray count];
    }
    else if([thePickerView isEqual:konzeptionStundenauswahl]){ 
        return  [stundenArray count];
    }
    
    else{
        return 0;
    }
}    
    

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
	
	if ([thePickerView isEqual:projektAuswahl]) {	
         //return [NSString stringWithFormat:@"%i, Zeile", row];
		//return [projektArtenArray objectAtIndex:row];
         return [projektArtenArray objectAtIndex:row];
	}else 
        if ([thePickerView isEqual:konzeptionStundenauswahl]) {
            return [stundenArray objectAtIndex:row];
        }
    
        else{
            return 0;
        }
}



//Einstellung der Spaltenbreiten
- (CGFloat)pickerView:(UIPickerView *)thePickerView
    widthForComponent:(NSInteger)component{
    
    if ([thePickerView isEqual:projektAuswahl]) {
        return 200.0;
    }
    else 
        if ([thePickerView isEqual:konzeptionStundenauswahl]) {
            return 50.0;
    }
    
        else {
            return 00.0;
        }
   
}

Zum Haare raufen.
Hast Du noch einen Tipp für mich?

Danke
Andreas, der weiter tüftelt.
 
Der Fehler liegt an den Arrays.
Was in OSX einfach ist, scheint mir unter iOS eine Kunst für sich zu sein.
Mit einem Array geht es und mit zweien eben nicht.

Hach, dass macht Spaß.
Andreas
 
"return nil" geht überhaupt nicht.
 
Zurück
Oben Unten