繁体   English   中英

如何在不使用按钮的情况下在视图控制器上获取自定义 TableViewCell 值并在目标 c 中重新加载表后设置它

[英]How to get custom TableViewCell value on view controller without using button and set it after reload table in objective c

我是 iOS 新手,我面临着从自定义表格视图单元格获取值到视图控制器的问题。 我正在使用 rate 视图进行评级,我正在检查 rate 的值是否小于 3 然后它显示必须在文本视图中输入文本,我想在视图控制器中获取值我的代码是这样的

CustomTableviewcell.h

@interface NextTableview : UITableViewCell<RateViewDelegate,UITextViewDelegate>
{
    NSString *StatusValue;
    UILabel *lbl;
}

@property(nonatomic,strong) IBOutlet UILabel *staticlbl;
@property(nonatomic,strong) IBOutlet UITextView *commenttxtview;
@property(nonatomic,strong) IBOutlet UILabel *Kpiidlbl;

@property (weak, nonatomic) IBOutlet RateView *rateView;
@property (weak, nonatomic) IBOutlet UILabel *statusLabel;

@end

CustomTableviewcell.m

@synthesize rateView,staticlbl,statusLabel,commenttxtview,Kpiidlbl;
- (void)awakeFromNib {
    // Initialization code
}

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

        // Configure the view for the selected state

        commenttxtview.layer.borderWidth = 0.70f;
        commenttxtview.layer.borderColor = [[UIColor blackColor] CGColor];
        commenttxtview.delegate=self;


        UIToolbar* doneToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
        doneToolbar.barStyle = UIBarStyleBlackTranslucent;
        doneToolbar.items = [NSArray arrayWithObjects:
                             [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
                             [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneButtonClickedDismissKeyboard)],
                             nil];
        [doneToolbar sizeToFit];
        commenttxtview.inputAccessoryView = doneToolbar;

        lbl = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0,90.0, 34.0)];


        [lbl setText:@"Enter Text"];
        [lbl setFont:[UIFont systemFontOfSize:12]];
        [lbl setBackgroundColor:[UIColor clearColor]];
        [lbl setTextColor:[UIColor lightGrayColor]];
        commenttxtview.delegate = self;

        [commenttxtview addSubview:lbl];

        statusLabel.hidden=YES;

        commenttxtview.hidden=YES;

        // Do any additional setup after loading the view from its nib.
        self.rateView.notSelectedImage = [UIImage imageNamed:@"not_selected_star@2x.png"];
        self.rateView.halfSelectedImage = [UIImage imageNamed:@"half_selected_star@2x.png"];
        self.rateView.fullSelectedImage = [UIImage imageNamed:@"selected_star@2x.png"];
        self.rateView.rating = 0;
        self.rateView.editable = YES;
        self.rateView.maxRating = 5;
        self.rateView.delegate = self;

        Kpiidlbl.hidden=YES;
    }
    -(void)doneButtonClickedDismissKeyboard
    {
        [commenttxtview resignFirstResponder];
       // commenttxtview.hidden=YES;
    }

    - (void)textViewDidEndEditing:(UITextView *)theTextView
    {
        if (![commenttxtview hasText]) {
            lbl.hidden = NO;

        }
    }

    - (void) textViewDidChange:(UITextView *)textView
    {
        if(![commenttxtview hasText]) {
            lbl.hidden = NO;
        }
        else{
            lbl.hidden = YES;
        }
    }


    - (void)rateView:(RateView *)rateView ratingDidChange:(int)rating {
        self.statusLabel.text = [NSString stringWithFormat:@"%d", rating];
        NSLog(@"Rating value =%@",self.statusLabel.text);
        StatusValue=statusLabel.text;
        NSLog(@"Status Value String =%@",StatusValue);

        // Hear I am getting value of rating..in StatusValue..
        int status=[StatusValue intValue];
        if(status<=3)
        {
            commenttxtview.hidden=NO;
        }
        else{
            commenttxtview.hidden=YES;
        }

    }

如何在 viewcontroller 中获取标签和 textview 值,并且我想在重新加载表后设置速率视图值以对视图进行速率处理。

在此处输入图片说明

在此处输入图片说明

在图像中听到我得到五颗星,如果我点击小于 3 颗星,它应该写评论。我在标签中获取率值。如何在视图控制器中同时获取标签和文本值。请告诉我如果您需要更多数据,请更新问题。提前致谢!

所以把它写在你的 CustomTableViewCell.h 中

@property(nonatomic,assign)NSInteger selectedRating;

每次在单元格中更新评级时,您都必须更改此变量的值。

在 viewController 中,它取决于您何时想要获取此单元格的值。 例如在这个方法中:

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
       CustomTableViewCell *yourCell = (CustomerTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
    NSLog(@"%lu",yourCell.selectedRating);
}

让我知道这是否有帮助! 没有变量的另一种方法是读取 statusLabel 中的 NSString 并将字符串更改为 NSInteger 变量...

如果您正在使用您的委托...

然后在RateViewDelegate中实现委托RateViewDelegate。 委托在它被分配到的类中被调用......

尝试这个

你必须添加@property (nonatomic, weak) NSObject<RateViewDelegate>* delegate; 到方法中的 CustomTableViewCell.h 的头文件

-(UITableViewCell) cellForRowAtIndexPath....

你必须像这样分配代表

cell.delegate = self;

现在将您的单元格委托方法修改为此

- (void)rateView:(RateView *)rateView ratingDidChange:(int)rating {
self.statusLabel.text = [NSString stringWithFormat:@"%d", rating];
NSLog(@"Rating value =%@",self.statusLabel.text);
StatusValue=statusLabel.text;
NSLog(@"Status Value String =%@",StatusValue);

// Hear I am getting value of rating..in StatusValue..
int status=[StatusValue intValue];
if(status<=3)
{
    commenttxtview.hidden=NO;
}
else{
    commenttxtview.hidden=YES;
}
if([self.delegate respondsToSelector:@selector(rateView:ratingDidChange:)]){
        [self.delegate rateView:rateView ratingDidChange:rating];
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM