我使用tableView显示一些信息,这只是四行信息。我想为每一行分配相应的信息。 就像下面图像中显示的那样,有四行,与图像中的相同,所以我使用tableView。这里我的问题是我创建了四个单元格,但不知道我应该如何在特定单元格中使用标签并显示信息。 并且如果值为null,那么该行不应该存在意味着如果四个中的两个值为null,那么tableView中只有两个具有值的行。我怎样才能做到这一点。直到现在我只能显示一行信息。
- (NSArray *)myTableViewCells
{
if (!_myTableViewCells)
{
_myTableViewCells = @[
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil],
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil],
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil],
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]
];
}
return _myTableViewCells;
}
if([managedObject valueForKey:@"personality_company_master_values"] != nil)
{
[_displayValues addObject:[NSString stringWithFormat:@"Personality %@",[managedObject valueForKey:@"personality_company_master_values"]]];
}
if([managedObject valueForKey:@"video_tag"] != nil)
{
[_displayValues addObject:[NSString stringWithFormat:@"Tag %@",[managedObject valueForKey:@"video_tag"]]];
}
if([managedObject valueForKey:@"industry_master_values"] != nil)
{
[_displayValues addObject:[NSString stringWithFormat:@"Industry %@",[managedObject valueForKey:@"industry_master_values"]]];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.myTableViewCells.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell* cell = self.myTableViewCells[indexPath.row];
// NSManagedObject *managedObject = [self.devices lastObject];
cell.backgroundColor = [self colorFromHexString:@"#014455"];
cell.textLabel.text = _displayValues[indexPath.row];
cell.textLabel.backgroundColor = [self colorFromHexString:@"#014455"];
cell.textLabel.textColor = [UIColor whiteColor];
cell.textLabel.font=[UIFont systemFontOfSize:14.0];
// UILabel *lbl=(UILabel*)[cell viewWithTag:900];
// [lbl setText:[managedObject valueForKey:@"personality_company_master_values"]];
// lbl.textColor=[UIColor blackColor];
return cell;
}
答案 0 :(得分:1)
我担心你做错了几件事,从预先分配一系列细胞开始。 Tableview不能像这样工作,您可以按需提供单元格并使用数据模型中的值填充它们。如果要删除单元格更新数据模型,请调用reloadData()
。这是一个简单的例子:
import UIKit
class MyCell: UITableViewCell {
var row: Int = -1 // serves no purpose but to show how you might subclass a UITableViewCell
}
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var dataModel = [
"Hello", "World,", "this", "is", "a", "tableview"
]
var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
var frame = view.bounds
let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.height
frame.origin.y += statusBarHeight
frame.size.height -= statusBarHeight
tableView = UITableView(frame: frame, style: .Plain)
tableView.delegate = self
tableView.dataSource = self
tableView.registerClass(MyCell.self, forCellReuseIdentifier: "mycell")
view.addSubview(tableView)
}
// MARK: - UITableViewDataSource
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataModel.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("mycell") as! MyCell
let row = indexPath.row
cell.row = row // there is no point in doing this other than to show it as an example
cell.textLabel!.text = dataModel[row]
return cell
}
// MARK: - UITableViewDelegate
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
dataModel.removeAtIndex(indexPath.row)
tableView.reloadData()
}
}
编辑:这是一个客观的c版
////////////////////////////
/// Objective C Version //
////////////////////////////
#import "ViewController.h"
@interface MyCell: UITableViewCell
@property(assign) NSInteger row; // serves no purpose but to show how you might subclass a UITableViewCell
@end
@implementation MyCell @end
@interface ViewController() <UITableViewDataSource, UITableViewDelegate>
@property NSMutableArray *dataModel;
@property UITableView *tableView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_dataModel = [NSMutableArray arrayWithArray: @[@"Hello", @"World,", @"this", @"is", @"a", @"tableview"]];
CGRect frame = self.view.bounds;
CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
frame.origin.y += statusBarHeight;
frame.size.height -= statusBarHeight;
_tableView = [[UITableView alloc] initWithFrame: frame style: UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
[_tableView registerClass: [MyCell class] forCellReuseIdentifier: @"mycell"];
[self.view addSubview: _tableView];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return _dataModel.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCell *cell = (MyCell *) [tableView dequeueReusableCellWithIdentifier: @"mycell"];
NSInteger row = indexPath.row;
cell.row = row; // there is no point in doing this other than to show it as an example
cell.textLabel.text = _dataModel[row];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[_dataModel removeObjectAtIndex: indexPath.row];
[_tableView reloadData];
}
@end
答案 1 :(得分:1)
获取要在数组中显示的值。 像这样的东西
@property (monatomic, strong)NSMuatableArray *displayValues;
-(void)viewDidLoad
{
self.displayValues = [[NSMutableArray alloc]init];
NSManagedObject *managedObject = [self.devices lastObject];
if([managedObject valueForKey:@"personality_company_master_values"] != nil)
{
[self.displayValues addObject:[managedObject valueForKey:@"personality_company_master_values"]];
}
if([managedObject valueForKey:@"company_master_values"] != nil)
{
[self.displayValues addObject:[managedObject valueForKey:@"company_master_values"]];
}
if([managedObject valueForKey:@"tag_master_values"] != nil)
{
[self.displayValues addObject:[managedObject valueForKey:@"tag_master_values"]];
}
}
- (NSArray *)myTableViewCells
{
if (!_myTableViewCells)
{
_myTableViewCells = @[
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil],
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil],
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil],
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]
];
}
return _myTableViewCells;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.displayValues.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell* cell = self.myTableViewCells[indexPath.row];
// NSManagedObject *managedObject = [self.devices lastObject];
//cell.textLabel.text = [NSString stringWithFormat:@"%@",[managedObject valueForKey:@"personality_company_master_values"]];
cell.textLabel.text = self.displayValues[indexPath.row];
//not getting have to do this way or any other way please help
// secondLabel.text = [NSString stringWithFormat:@"%@",[managedObject valueForKey:@"company_master_values"]];
// thirdLabel.text = [NSString stringWithFormat:@"%@",[managedObject valueForKey:@"tag_master_values"]];
return cell;
}
答案 2 :(得分:0)
您不需要创建固定数量的单元格,这不是解决问题的有效方法。您应该创建NSMutableDictionary并保存这样的数据:
NSMutableArray *data = [NSMutableDictionary dictionary];
[data setValue:@"Vijayakanth" forKey:@"Personality"];
现在在表视图委托中,您可以返回noOfRowsInSection的键计数,在cellForRowAtIndexPath中,您可以从字典中获取键,获取该键的值w.r.t并将值分配给您的单元格。在你的情况下:
Key: Personality (which is shown on the left side)
Value: Vijayakanth (which is shown on the right side)
希望你明白这一点。