aus einem TableView in ein Detailview

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • aus einem TableView in ein Detailview

    Hallo,

    da ich relativ neu bin in der Objektiv-C Programmiersprache habe ich ein paar Verständnis Fragen:
    Ich habe eine kleine App die mir aus einem MySql Server mittels Webservices Daten in die App in Form von Json liefert.
    Ich habe das ganze auf einem Tabbed View Controller. Eine Seite zum Daten schreiben eine und das ist ein UiTabellView dort werden die Daten aus dem Webservice gezeigt.
    ich habe mir nun auf der ebene des UItabellView eine Navigation Controller angelegt und noch einen uiViewcontroller hinter den TableView angelegt.
    Die Spalte vom TableView habe ich mit dem ViewController verbunden per Push.
    Auf dem neuen ViewController habe ich drei Labels und ein Textfeld für die Daten angelegt und diese auch mit den Outlets verbunden.
    Dann habe ich noch diese .h und.m Dateien für den neuen View angelegt.

    in der .h Datei habe ich die Labels und Textfelder deklariert.

    Quellcode

    1. @interface SecondTableDetailViewController : UIViewController
    2. @property (nonatomic, strong) IBOutlet UILabel *DetailDatum;
    3. @property (nonatomic, strong) IBOutlet UILabel *DetailTemperatur;
    4. @property (nonatomic, strong) IBOutlet UILabel *DetailFeuchte;
    5. @property (nonatomic, strong) IBOutlet UITextView *DetailBemerkung;
    6. @end


    In der .m Datei von dem TableView habe ich die .h Datei des DetailViewController importiert.

    Quellcode

    1. #import "SecondTableDetailViewController.h"


    Meine Daten bekomme ich aus der Json Datei wie folgt:

    Quellcode

    1. -(void) getData:(NSData *) data{
    2. NSError *error;
    3. json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
    4. [self.tableView reloadData];}
    5. -(void) start {
    6. NSURL *url = [NSURL URLWithString:kGETUrl];
    7. NSData *data = [NSData dataWithContentsOfURL:url];
    8. [self getData:data];}
    9. - (void)viewDidLoad{
    10. [super viewDidLoad];
    11. NSTimer *myTimer = [NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(start) userInfo:nil repeats:YES];
    12. [[NSRunLoop mainRunLoop] addTimer:myTimer forMode:NSDefaultRunLoopMode];
    13. [self start];}
    14. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    15. // Return the number of sections.
    16. return 1;}
    17. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    18. // Return the number of rows in the section.
    19. return [json count];}
    20. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    21. static NSString *CellIdentifier = @"Cell";
    22. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    23. if (cell == nil) {
    24. cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];}
    25. NSDictionary *info = [json objectAtIndex:indexPath.row];
    26. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    27. [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    28. NSDate *date = [dateFormatter dateFromString:[info objectForKey:@"Datum"]];
    29. [dateFormatter setDateFormat:@"dd.MM.yyyy HH:mm"];
    30. NSString *subtitel =[NSString stringWithFormat:@"Temperatur: %@ °C,Feuchte: %@ %%",[info objectForKey:@"Temperatur"],[info objectForKey:@"Feuchte"]];
    31. cell.textLabel.text = [dateFormatter stringFromDate:date];
    32. cell.detailTextLabel.text = subtitel;
    33. return cell;}
    Alles anzeigen


    Dann habe ich beim googlen noch diverse Dinge gefunden, diesen Code hier z.B. der stand schon in meiner .m Datei drin.

    Quellcode

    1. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    2. // Navigation logic may go here. Create and push another view controller.
    3. /*
    4. <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
    5. // ...
    6. // Pass the selected object to the new view controller.
    7. [self.navigationController pushViewController:detailViewController animated:YES];
    8. */
    9. }


    Das scheint mir etwas damit zutun zuhaben.

    Aber was muss ich nun noch machen um die Daten tatsächlich auf den DetailViewController zubekomme.

    Vielen Dank für Eure Hilfe.

    Gruß Matthias
  • Du solltest in SecondTableDetailViewController Propertys für die Werte anlegen, z. B. das Datum. Diese Propertys setzt Du dann in tableView:didSelectRowAtIndexPath: und übergibst die Propertywerte schließlich in viewWillAppear: der Klasse SecondTableDetailViewController.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    matz schrieb:

    Hast du deinen DetailViewController per Segue über das Storyboard verknüpft?

    er hat ja die Methode tableView:didSelectRowAtIndexPath: implementiert...

    BTW: Die Erzeugung eines Viewcontrollers über alloc-init macht niemals Sinn, wenn dessen View in einem Storyboard liegt.


    Er kann ja trotzdem eine Segue vom tableviewcontroller zum detailcontroller(die er ja im Storyboard anlegen kann) in der didSelect Methode auslösen und in prepareForSegue, die Werte an den destinationController übergeben.
    Every language has an optimization operator. In ObjC that operator is ‘//’.

    golbros.de
  • Hallo,

    das mit diesem Segue habe ich gesehen... konnte aber nix mit anfangen. Das scheint aber der Schlüßel zuallem zu sein... ?!

    Diese Methode war schon da... Die habe ich nicht bewusst eingefügt. Kann das auch gern ändern, wenn das nix ist.

    Einfach und sinnvoll soll es sein :) Vorallem "nachdenkbar"
  • Öffne mal Deine Storyboard-Datei. Da solltest Du drei Views finden:
    1. eine ausgegraute NavigationController
    2. dann Deinen TableViewController
    3. und dann noch Deinen Detail-Controller "SecondTableDetailViewController "

    Der graue Pfeil zwischen 2 + 3 ist der segue. Der hat im Attributsinspektor einen Identifier (da, wo Du auch Push angibst). Gib dem Identifier einen Namen, Du wirst ihn brauchen (so was wie "showDetail" ist gern genommen)!

    Wenn Du ein Standard-Apple-Projekt als Template gefunden hast, findest Du am unteren Ende eine auskommentierte Methode. Damit mal googlen und schon geht es ganz einfach. Oder Du schaust in meinen Beiträgen, was ich zum Thema segue geschrieben habe. Da solltest Du genug Code-Schnipsel finden.

    Gruß & viel Erfolg

    --> Erklärung zum Thema Segue
    ----
    Macht's gut und danke für den Fisch