开发者

How to populate a label field from a selected row in a uitableview

开发者 https://www.devze.com 2022-12-14 23:04 出处:网络
I have a uitableview that is populated from a sqlite query. I want to select or click on a row and then display that row\'s value in a uilabel field.To show the user that the row was selected.

I have a uitableview that is populated from a sqlite query.

I want to select or click on a row and then display that row's value in a uilabel field. To show the user that the row was selected.

I also want to pass that value on to different controllers that will be called later.

Here is a copy of my cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"psystem";
    PSystem *psystem = [self.ppdm_systems objectAtIndex:indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];    
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...
    //  self.accessoryType = UITableViewCellAccessoryCheckmark;
    cell.textLabel.text = psystem.system_id; 
    return 开发者_高级运维cell;
}

I took out the _label.text .... in my various experiments.

Now what is not working is the passing of the value to different controllers.

Using the example listed here, the source controller is TableViewController and is where the value is set. The target controller is DetailViewController.

I can pass the title of the tab bar in, but that's from TableView --> DetailView.

I am not sure how to pull from tableview; ie: Tableview <-- DetailView when I am in DetailView.

thx


In your UIViewController, implement:

- (MyObject *)valueForSelectedRow {
    MyCell *cell = (MyCell *)[self.tableView cellForRowAtIndexPath:[self.tableView indexPathForSelectedRow]];
    return cell.myObject;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Get value
    MyObject *object = [self valueForSelectedRow];

    // Update the label, assumed that _label is a pointer to a UILabel view object.
    _label.text = object.myValue;
}

When you want to push a new view controller, you just call -valueForSelectedRow and then use that value to push the controller.

This is assumed that you have a UITableViewCell subclass, with a property set to some model object. When you don't have that and just set the text property, that NSString object will be your 'model' object, although it would be easier when your cells handle custom model objects.

EDIT: Thanks for editing your answer. I now have the information I need. In this line: cell.textLabel.text = psystem.system_id, you setup the cell by simply setting the textLabel's text property. This is what I described in the paragraph above. I always create a UITableViewCell subclass, with a property set the the complete PSystem object. When you assign a PSystem object to the cell, it will handle it's contents, so you can easily manage your view in the, well, view. That's a very compelled approach since you never have to look at the controller again to alter the view's contents.

However, it can be done the way you currently have it. It would look something like:

- (NSString *)valueForSelectedRow {
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[self.tableView indexPathForSelectedRow]];
    return cell.textLabel.text;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Get value
    NSString *value = [self valueForSelectedRow];

    // Update the label, assumed that _label is a pointer to a UILabel view object.
    _label.text = value;
}

In this case, your PSystem model has been replaced with an NSString object. For this, it's enough, but it could be so much easier to have the object itself. Okay, that can also be done by selecting the PSystem object again from the p_system array by the NSIndexPath, but things will become harder once you come up with more complex tableviews.

0

精彩评论

暂无评论...
验证码 换一张
取 消