CheckBox in tableview

前端 未结 3 1643
孤独总比滥情好
孤独总比滥情好 2021-01-03 10:38

I am facing trouble in putting check boxes into a UITableView. I am posting a part of my code here.

- (NSCell *)tableView:(NSTableView *)tableView dataCellFo         


        
相关标签:
3条回答
  • 2021-01-03 11:06

    If you have your NSTableView content mode set to "Cell Based" it will be "View Based" when you move the checkbox over.

    0 讨论(0)
  • 2021-01-03 11:08

    I'm not sure why you're creating the cell in code. You can just drag the cell onto the table column in Interface Builder.

    Also, setObjectValue: is where you respond to the change in the cell's state. The user has already changed the cell's state to off; then you send setNextState and change it back. That's why the cell doesn't appear to uncheck: you keep re-checking it.

    What you need to do is not touch the cell at all, but set the object value (which, for this column, will probably be a Boolean NSNumber containing either YES or NO) as the new value of the appropriate property in your model.

    Also, of course, make sure the column is set as editable.

    0 讨论(0)
  • 2021-01-03 11:10

    You're missing a couple of important pieces. You need to update your model (data stcuture) in response to the tableValue:setObjectValue:forTableColumn:row: message, so that you can correctly return the new value from tableView:objectValueForTableColumn:row: method.

    Here are some table data source methods assuming you have a 'myRows' array filled with objects with a 'booleanAttribute' property.

    - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
        return [myRows count];
    }
    
    - (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
        BOOL value = [[myRows objectAtIndex:row] booleanAttribute];
        return [NSNumber numberWithInteger:(value ? NSOnState : NSOffState)];
    }
    
    - (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {          
        [[myRows objectAtIndex:row] setBooleanAttribute:[value booleanValue]];
    }
    

    You should also setup your table cell in interface builder. You can drag a button cell configured like a standard check box directly onto one of your table columns.

    0 讨论(0)
提交回复
热议问题