2016-01-03 171 views
-1

這裏我使用UITableviewcell的子類作爲Tableview。我正在創建一些虛擬json值,並將其傳遞給我的tableview單元格中的標籤。tableview中的單選按鈕單元格

而且我還在Tabelview.xibleft side處添加了一個按鈕。該按鈕將作爲單選按鈕來檢查和取消選中。現在,當我運行我的所有表格視圖都顯示取消選中圖像按鈕。我如何檢查或取消選中?

這裏是我的代碼:

Tableview.h

#import <UIKit/UIKit.h> 

@interface TableView : UITableViewCell 

@property (weak, nonatomic) IBOutlet UILabel *lab1; 

@property (weak, nonatomic) IBOutlet UILabel *lab2; 


@property (weak, nonatomic) IBOutlet UILabel *lab3; 
@property (weak, nonatomic) IBOutlet UIButton *checkBtn; 


@end 

Tableview.m

#import "TableView.h" 

@implementation TableView 
@synthesize lab1 = _lab1; 
@synthesize lab2 = _lab2; 
@synthesize lab3 = _lab3; 
@synthesize checkBtn; 



- (void)awakeFromNib { 
    // Initialization code 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

Viewcontroller.m

#import "ViewController.h" 
#import "TableView.h" 

@interface ViewController()<UITableViewDataSource,UITableViewDelegate> 

@end 

@implementation ViewController 
{ 


    NSArray *jsonObject; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    //NSArray *jsonObject; 
    jsonObject = @[ 
        @{ 
         @"partner": @"50", 
         @"gamer": @"199", 
         @"pointer": @"144" 

        }, 
        @{ 
         @"partner": @"80", 
         @"gamer": @"112", 
         @"pointer": @"11"     }, 
        @{ 
         @"partner": @"30", 
         @"gamer": @"112", 
         @"pointer": @"14" 


        }, 
        @{ 
         @"partner": @"50", 
         @"gamer": @"100", 
         @"pointer": @"199" 
        }, 
        @{ 
         @"partner": @"50", 
         @"gamer": @"19", 
         @"pointer": @"44" 

        }, 
        @{ 
         @"partner": @"2000", 
         @"gamer": @"500", 
         @"pointer": @"1000" 
        } 
        ]; 

    NSError *err; 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonObject options:NSJSONWritingPrettyPrinted error:nil]; 



    NSString * jsonString=[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

    NSLog(@"%@",jsonString); 




} 



- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [jsonObject count]; 
} 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"TableView"; 
    TableView *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) 
    { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil]; 
     cell = [nib objectAtIndex:0]; 
    } 

    cell.lab1.text = [jsonObject objectAtIndex:indexPath.row][@"gamer"]; 
    cell.lab2.text = [jsonObject objectAtIndex:indexPath.row][@"partner"]; 
    cell.lab3.text = [jsonObject objectAtIndex:indexPath.row][@"pointer"]; 


    return cell; 
} 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 78; 
} 

只有一個單選按鈕應該檢查,其他行單選按鈕應該取消選中。

我用了兩個圖像:

  1. selectBtn.png
  2. deselectBtn.png

我缺少什麼?我嘗試了這些步驟來添加到我的項目中,但我是初學者,所以無法完美地完成並且導致更多的崩潰。

@interface RootViewController : UITableViewController { 
    NSMutableArray *radioButtonArray; 
} 

@property (nonatomic ,retain)NSMutableArray *radioButtonArray; 
in tableviewController.h.m 

- (void)viewDidAppear:(BOOL)animated { 
    radioButtonArray = [NSMutableArray new]; 
    for (int i = 0; i < 30; i ++) { 
     UIButton *radioButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [radioButton setImage:[UIImage imageNamed:@"radio-off.png"] forState:UIControlStateNormal]; 
     [radioButton setImage:[UIImage imageNamed:@"radio-on.png"] forState:UIControlStateSelected]; 
     [radioButton setFrame:CGRectMake(0, 0, 44, 44)]; 
     [radioButton addTarget:self action:@selector(radioButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
     [radioButtonArray addObject:radioButton]; 
    } 
    [super viewDidAppear:animated]; 
} 
and give it a (IBAction) void 

- (IBAction)radioButtonPressed:(UIButton *)button{ 
    [button setSelected:YES]; 
    // Unselect all others. 
    for (UIButton *other in radioButtonArray) { 
     if (other != button) { 
      other.selected=NO; 
     } 
    } 
} 

Here is my project

回答

1

請使用數組來保存所有的細胞。和 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath委託來獲取哪一行被選中,並使其他行按鈕,並選擇所選的行按鈕。

我已經爲你做了這個我建議你使用邏輯,不要發佈你在這裏面臨的每一個問題。

https://www.dropbox.com/s/j02yotvevxfp821/jsonTableView%203.zip?dl=0

+0

但滾動回來,我看不到我已經選擇的單選按鈕 – david

+0

還有一個想法。我需要選擇單選按鈕。不是表格視圖單元格.......當我向下滾動時,我選擇的按鈕會自動取消選擇 – david

+0

下載新代碼我已更新鏈接。要不選擇行,您可以在選擇部分中設置單元格的屬性none。 –

0

在第一連接IBOutlet中checkBtn按鈕

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"TableView"; 
TableView *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) 
{ 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil]; 
    cell = [nib objectAtIndex:0]; 
} 

cell.lab1.text = [jsonObject objectAtIndex:indexPath.row][@"gamer"]; 
cell.lab2.text = [jsonObject objectAtIndex:indexPath.row][@"partner"]; 
cell.lab3.text = [jsonObject objectAtIndex:indexPath.row][@"pointer"]; 

[cell.checkBtn addTarget:self action:@selector(radioButtonPressed:) forControlEvents:UIControlEventTouchDown]; 

return cell; 
} 

//Radio button pressed 

-(void)radioButtonPressed:(id)sender 
{ 
UIButton *btn = (UIButton *)sender; 
if([[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"deselectBtn"]]){ 
    [btn setImage:[UIImage imageNamed:@"selectBtn"] forState:UIControlStateNormal]; 
}else{ 
    [btn setImage:[UIImage imageNamed:@"deselectBtn"] forState:UIControlStateNormal]; 
} 
} 
+1

當我選擇一個布通,然後我回滾動我的選擇按鈕被自動取消......而也只有一行單選按鈕應該選擇那麼其他應該取消 – david

+1

請幫助me..1。一次只能在一行中選擇一個按鈕。 2.當我選擇一個按鈕,然後當我向下滾動,回來我選定的按鈕被自動取消選擇, – david

相關問題