Pickerview. iOS

  • Pickerview. iOS

    Hey Leute,

    folgendes Problem ich hab ein Pickerview mit 2 spalten und ein paar Zeilen. Ich möchte das wenn ich auf ein Knopf drücke
    geprüft wird welche beiden Einträge gerade beim Pickerview gegenüber stehen und dann eine Methode ausgeführt wird die nur für die 2 Einträge übereinstimmen. Angenommen im Pickerview ist in spalte 1 a ausgewählt und in spalte 2 g dann soll die Methode xy ausgeführt werden, wenn aber in spalte 1 j und in spalte 2 u ausgewählt ist, dann soll die Methode yz ausgeführt werden.

    hoffe ihr versteht mein anliegen

    Gruß
  • Du könntest den Namen der aufzurufenden Methode auch dynamisch in der App zusammen setzen und die Methode dann mit performSelector: aufrufen.

    Je nachdem was in den jeweiligen Methoden gemacht wird, könntest Du natürlich auch gleich die jeweilige Verarbeitung dynamisch je nach ausgewählter Picker Einstellung ausführen.

    Was wird in den einzelnen Methoden je nach Picker Einstellung denn gemacht?
  • ich habe 2 textfields dann ein Pickerview wo ich auswähle welche Rechenoperation ich nehmen möchte. Und dem entsprechend müssen auch andere Formeln für die Rechnung genommen werden.
    In den einzelnen Methoden stehen nur Formeln drin die wenn ich dann einen Knopf drücke ausgeführt werden sollen.

    wäre schon auch etwas code sehen zu können da ich noch nicht so fortgeschritten bin.
  • Nein mein code besteht aus

    Quellcode

    1. #import "kreis_Expert.h"
    2. #import "globalVar.h"
    3. //#import <math.h>
    4. @interface kreis_Expert ()
    5. @end
    6. double pi = M_PI;
    7. double r = 0;
    8. double b = 0;
    9. double u = 0;
    10. double Ak = 0;
    11. double As = 0;
    12. double Aks = 0;
    13. double MC = 0;
    14. double MD = 0;
    15. float Acdm = 0;
    16. double Aseg = 0;
    17. double winkelSek = 0;
    18. int comp_0;
    19. int comp_1;
    20. NSString *test;
    21. NSString *test2;
    22. NSString *test3;
    23. @implementation kreis_Expert
    24. @synthesize scrollview, picker;
    25. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    26. return 2;
    27. }
    28. - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    29. if (component == 0) {
    30. return [array1 count];
    31. }
    32. if (component == 1) {
    33. return [array2 count];
    34. }
    35. }
    36. - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    37. if (component == 0) {
    38. return [array1 objectAtIndex:row];
    39. }
    40. if (component == 1) {
    41. return [array2 objectAtIndex:row];
    42. }
    43. }
    44. - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    45. if (component == 0) {
    46. comp_0 = row;
    47. }
    48. if (component == 1) {
    49. comp_1 = row;
    50. }
    51. if (comp_0 == comp_1) {
    52. [picker selectRow:row+1 inComponent:1 animated:YES];
    53. }
    54. }
    55. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    56. {
    57. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    58. if (self) {
    59. // Custom initialization
    60. }
    61. return self;
    62. }
    63. - (void)viewDidLoad
    64. {
    65. [super viewDidLoad];
    66. [self.scrollview setScrollEnabled: YES];
    67. [self.scrollview setContentSize:CGSizeMake(320,600)];
    68. array1 = [[NSMutableArray alloc]initWithObjects:@"Radius",@"Winkel",@"Umfang",@"BogenLänge",@"Kreisflächeninhalt"
    69. ,@"Sektorflächeninhalr",@"Inhalt des Segmentes",@"Flächeninhalt Dreieck", nil];
    70. array2 = [[NSMutableArray alloc]initWithObjects:@"Radius",@"Winkel",@"Umfang",@"BogenLänge",@"Kreisflächeninhalt"
    71. ,@"Sektorflächeninhalr",@"Inhalt des Segmentes",@"Flächeninhalt Dreieck", nil];
    72. // Do any additional setup after loading the view.
    73. }
    74. - (void)didReceiveMemoryWarning
    75. {
    76. [super didReceiveMemoryWarning];
    77. // Dispose of any resources that can be recreated.
    78. }
    79. - (void)dealloc {
    80. [_textFieldRadius release];
    81. [_textFieldSegment release];
    82. [_kreisUmfang release];
    83. [_bogenLaenge release];
    84. [_kreisFlaechenInhalt release];
    85. [_sektorFlaechenInhalt release];
    86. [_inhaltKreisSegment release];
    87. [_flaecheninhaltDreieck release];
    88. [super dealloc];
    89. }
    90. - (IBAction)berechnen:(id)sender {
    91. }
    92. -(void)radiusUndWinkel {
    93. r = [self.textFieldRadius.text doubleValue];
    94. winkelSek = [self.textFieldSegment.text doubleValue];
    95. //radius und winkel gesetzt !
    96. b = r * pi * (winkelSek/180);
    97. u = 2 * r * pi;
    98. Ak = pow(r, 2) * pi ;
    99. As = pow(r, 2) * pi * (winkelSek/360);
    100. MC = r;
    101. MD = r;
    102. Acdm = 0.5 * r * r * sinf( pi * winkelSek / 180 );
    103. NSLog(@"%.3f",Acdm);
    104. Aseg = As - Acdm;
    105. self.kreisUmfang.text = [NSString stringWithFormat:@"Kreisumfang:%.3f LE", u];
    106. self.kreisFlaechenInhalt.text = [NSString stringWithFormat:@"Kreisflächeninhalt:%.3f LE^2",Ak];
    107. self.bogenLaenge.text = [NSString stringWithFormat:@"Bogenlänge:%.3f LE", b];
    108. self.sektorFlaechenInhalt.text = [NSString stringWithFormat:@"Sektorflächeninhalt:%.3f LE^2", As];
    109. self.inhaltKreisSegment.text = [NSString stringWithFormat:@"Inhalt des Kreissegmentes:%.3f LE^2",Aseg];
    110. self.flaecheninhaltDreieck.text = [NSString stringWithFormat:@"Flächeninhalt Dreieck:%.3f",Acdm];
    111. [self.textFieldSegment resignFirstResponder];
    112. [self.textFieldRadius resignFirstResponder];
    113. }
    114. -(void)bogenlangeUndAsektor {
    115. }
    116. @end
    Alles anzeigen
  • Verwendest Du ARC? Wenn ja, dann ist es ein Wunder, dass die App nicht crasht. Bei Verwendung von ARC sollte man immer die Setter/Getter verwenden, also z.B. self.array1 und nicht nur array1.

    In berechnen: könntest Du die aufzurufende Methode je nach Picker Einstellungen z.B. so berechnen:

    Quellcode

    1. - (IBAction)berechnen:(id)sender
    2. {
    3. NSString *stringForComponent0 = [[self.array1 objectAtIndex:[self.picker selectedRowInComponent:0]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    4. NSString *stringForComponent1 = [[self.array2 objectAtIndex:[self.picker selectedRowInComponent:1]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    5. NSString *selectorString = [NSString stringWithFormat:@"berechne%@Und%@",stringForComponent0,stringForComponent1];
    6. SEL selector = NSSelectorFromString(selectorString);
    7. [self performSelector:selector];
    8. }

    Ich bin mir aktuell nicht ganz sicher, ob man in Objective-C eine Methode z.B. berechneBogenLängeUndKreisflächeninhalt nennen kann, also mit einem ä im Methodennamen.

    Evtl. bietet es sich an für array1 und array2 englische Namen zu verwenden und dann in pickerView:titleForRow:forComponent: den Title über NSLocalizedString() und eine Localizable.string Datei zu lokalisieren.

    Die Methoden könnten dann z.B. calculateRadiusAndAngle, calculateRadiusAndArcLength usw. heissen.