需要帮助设置自定义单元格

时间:2015-12-03 13:34:11

标签: ios objective-c iphone uitableview custom-cell

我以前从未为tableView实现自定义单元格,并且对如何继续操作感到困惑。我正在尝试制作一个个性测试应用程序,其中每个问题都在我的tableView的单元格中表示,并且在每个问题下面是几个按钮,它们将作为对相应问题的响应。我设法用问题的textview设置我的单元格,并设置了几个具有适当约束的按钮,这样它们就不会移动了。

我还在属性检查器中将单元格样式设置为自定义。

有人可以帮我解决如何使用我的问题设置textview吗?我尝试制作UITextView的属性并将其链接到单元格中的TextView,但随后出现错误,说我不允许使用IBOutlet填充重复出现的单元格。

这是我的故事板的截图。如果您需要查看其他任何内容,请与我们联系。 enter image description here enter image description here

TestVC.h

#import <UIKit/UIKit.h>
#import "Questions.h"
#import "CustomCell.h"

@interface TestViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (strong, nonatomic) IBOutlet UITableView *tableView;
@property (strong, nonatomic) IBOutlet UITextView *instructions;
@property (weak, nonatomic) IBOutlet UIButton *results;
//@property (strong, nonatomic) IBOutlet *question;
@property (nonatomic, strong) Questions *survey;

-(IBAction)backPressed:(id)sender;
@end

TestViewController.m

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [survey.questions count];
}

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

    static NSString *simpleTableIdentifier = @"QuestionCell";

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    /*
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
    */

    NSString *que = (NSString *)[survey.questions objectAtIndex:indexPath.row];
    //UITextView *textView = (UITextView *)[cell viewWithTag: 100];
    cell.textView = (UITextView *)[cell viewWithTag: 100];
    cell.textView.text = que;

    return cell;
}

CustomCell.h

#import <UIKit/UIKit.h>

@interface CustomCell : UITableViewCell

// Variables for questions and answers
@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (weak, nonatomic) IBOutlet UIButton *strongAgree;
@property (weak, nonatomic) IBOutlet UIButton *agree;
@property (weak, nonatomic) IBOutlet UIButton *weakAgree;
@property (weak, nonatomic) IBOutlet UIButton *neutral;
@property (weak, nonatomic) IBOutlet UIButton *strongDisagree;
@property (weak, nonatomic) IBOutlet UIButton *disagree;
@property (weak, nonatomic) IBOutlet UIButton *weakDisagree;

@end

CustomCell.m

#import "CustomCell.h"

@interface CustomCell ()

@end

@implementation CustomCell

@synthesize textView;
@synthesize strongAgree;
@synthesize agree;
@synthesize weakAgree;
@synthesize neutral;
@synthesize strongDisagree;
@synthesize disagree;
@synthesize weakDisagree;

@end

3 个答案:

答案 0 :(得分:1)

在属性检查器中为UITextView设置标记,并通过viewWithTag方法获取它:

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

    static NSString *simpleTableIdentifier = @"QuestionCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    NSString *que = (NSString *)[survey.questions objectAtIndex:indexPath.row];

    UITextView *textView = (UITextView *)[cell viewWithTag:100];//Use your tag
    textView.text = que;


    return cell;
}

这对你有用。

答案 1 :(得分:0)

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

    static NSString *simpleTableIdentifier = @"QuestionCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    NSString *que = (NSString *)[survey.questions objectAtIndex:indexPath.row];
    cell.textLabel.text = que;


    return cell;
}

从我在此处看到的情况来看,您不会创建自定义单元格,只能创建正常的UITableViewCell

答案 2 :(得分:0)

您需要创建UITableViewCell的子类。称之为CustomCell或其他,然后给它你在故事栏中创建的IBoutlet属性。

例如,在CustomCell.h中:

@property (weak, nonatomic) IBOutlet UITextView textView;

然后在cellForRowAtIndexPath中:

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

    static NSString *simpleTableIdentifier = @"QuestionCell";

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    // EDIT
    if (!cell) 
    {
        cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }//

    NSString *que = (NSString *)[survey.questions objectAtIndex:indexPath.row];
    cell.textview.text = que;

    return cell;
}

最后在您的故事板中,选择您自定义的单元格,并在检查器中将其类设置为CustomCell。

注意:您的IBOutlet属性应该始终是弱属性。