[英]How to change image of imageview in tableview custom cell with pagination.
[英]Change custom tableview cell's image
我的情況:我做一個名為自定義單元格: BestQuestionListCell
和我創建tableview
在BestQuestionListViewController
。 在BestQuestionListCell
我在左側添加一個按鈕。 我在button
上設置了Image。 現在,當我點擊單元格時, button
的圖像確實發生了變化。 現在,我想在顯示視圖時將這些單元格之一設置為選中狀態。
我試圖設置按鈕的圖像,我也試圖將單元格設置為選中狀態。 他們兩個都不起作用。
UISreenShot:BestQuestionListViewController 的屏幕截圖
這是tableViewcell的代碼。
@implementation BestQuestionListCell
@synthesize questionLabel;
@synthesize authorLabel;
@synthesize ownerButton;
@synthesize starButton;
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
NSLog(@"I am selected! %@",selected?@"yes":@"no");
// [super setSelected:selected animated:animated];
if (selected) {
[self.starButton setImage:[UIImage imageNamed:@"Fstar"] forState:UIControlStateNormal];
}else{
[self.starButton setImage:[UIImage imageNamed:@"Star"] forState:UIControlStateNormal];
}
}
- (void)setButtonImage:(UIImage *)buttonImage{
_buttonImage = buttonImage;
[self.starButton setImage:[UIImage imageNamed:@"Fstar"] forState:UIControlStateNormal];
[self setNeedsLayout];
NSLog(@"nothing happened? %@",buttonImage);
}
這是表格視圖。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *cellIdentifer = @"BestQuestionListCell";
BestQuestionListCell *mainCell = (BestQuestionListCell *)[self.bestQuestionListTableView dequeueReusableCellWithIdentifier:cellIdentifer];
if(mainCell == nil) {
mainCell = [[[NSBundle mainBundle] loadNibNamed:cellIdentifer owner:self options:nil] firstObject];
}
if ( [DataSession sharedSession].subQuestionArray.count > 0) {
mainCell.questionLabel.text = [[DataSession sharedSession].subQuestionArray[indexPath.row] question_content];
mainCell.questionLabel.textColor = [UIColor colorWithRed:74/255.0f green:74/255.0f blue:74/255.0f alpha:1.0f];
mainCell.questionLabel.backgroundColor = [UIColor whiteColor];
mainCell.selectionStyle = UITableViewCellSelectionStyleNone;
}
return mainCell;
}
我什么都沒做
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
我嘗試了以下三種方法來解決此問題,但是沒有用。
[mainCell setButtonImage:[UIImage imageNamed:@"Fstar"]];
[mainCell.starButton setImage:[UIImage imageNamed:@"Fstar"] forState:UIControlStateNormal];
[mainCell setSelected:YES animated:YES];
根據您在下面的已編輯問題,代碼工作正常。 我已經完成了代碼注釋,以便您可以正確理解代碼,如果仍然有問題可以詢問。
#import "BestQuestionListVC.h"
#import "BestQuestionListCell.h"
@interface BestQuestionListVC () <UITableViewDelegate, UITableViewDataSource>{
NSArray *arrQuesList;
NSArray *arrAuthorList;
NSMutableArray *arrMutBtnSelected; // arrMut of bools, containing true/false of button as selected or not.
}
@property (strong, nonatomic) IBOutlet UITableView *tblBestQuestion;
@end
@implementation BestQuestionListVC
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// creating temp array of data
arrQuesList = @[@"ques #1", @"ques #2", @"ques #3", @"ques #4", @"ques #5", @"ques #6", @"ques #7", @"ques #8" ];
arrAuthorList = @[@"Author #1", @"Author #2", @"Author #3", @"Author #4", @"Author #5", @"Author #6", @"Author #7", @"Author #8" ];
arrMutBtnSelected = [NSMutableArray new]; // alloc Mutable array
// array of bools, initially all false as not any button is selected
for (int i=0; i < arrQuesList.count; i++) {
[arrMutBtnSelected addObject:[NSNumber numberWithBool:false]];
}
// for initially first button is selected.
[arrMutBtnSelected replaceObjectAtIndex:0 withObject:[NSNumber numberWithBool:true]];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)btnStarClicked:(UIButton *)sender {
// If one button is selected at one time
// start
/*
[arrMutBtnSelected removeAllObjects];
for (int i=0; i < arrQuesList.count; i++) {
[arrMutBtnSelected addObject:[NSNumber numberWithBool:false]];
}
[arrMutBtnSelected replaceObjectAtIndex:sender.tag withObject:[NSNumber numberWithBool:true]];
*/
// end
// if user can selects multiple buttons
// start
/*
if (sender.selected) {
[arrMutBtnSelected replaceObjectAtIndex:sender.tag withObject:[NSNumber numberWithBool:false]];
}
else{
[arrMutBtnSelected replaceObjectAtIndex:sender.tag withObject:[NSNumber numberWithBool:true]];
}
*/
// end
[self.tblBestQuestion reloadData];
}
#pragma mark - TableViewDelegate
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return arrQuesList.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
BestQuestionListCell *quesCell = [tableView dequeueReusableCellWithIdentifier:@"BestQuestionListCell"];
quesCell.lblQuestion.text = arrQuesList[indexPath.row];
quesCell.lblAuthor.text = arrAuthorList[indexPath.row];
quesCell.btnStar.tag = indexPath.row ;
if (arrMutBtnSelected[indexPath.row] == [NSNumber numberWithBool:true]) {
quesCell.btnStar.selected = true;
}
else{
quesCell.btnStar.selected = false;
}
return quesCell;
}
@end
輸出:
最初在項目運行時:
如果用戶一次選擇一個按鈕,則輸出:
用戶選擇任何多個按鈕時的輸出
//you could write only
[mainCell setSelected:YES animated:YES];
它對我有用。請嘗試。
First set the IBOutLet in the tableViewCell.
然后在viewController中:在cellForRowAtIndexPath方法中,您可以這樣編寫:
UIImage *imageSelected = [UIImage imageNamed:@"your selected img name"];
UIImage *imageNotSelected = [UIImage imageNamed:@"your not selected img name"];
[cell.yourBtnName setImage:imageNotSelected forState:UIControlStateNormal];
[cell.yourBtnName setImage:imageSelected forState:UIControlStateSelected];
[cell.yourBtnName addTarget:self action:@selector(yourBtnClickMethod:) forControlEvents:UIControlEventTouchUpInside];
然后在行動方法:
-(void)yourBtnClickMethod:(UIButton *)btn{
btn.selected = !btn.selected;
}
希望對您有幫助。謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.