iphone - UITableview - 标题视图不加载对象键

时间:2010-11-09 00:45:46

标签: iphone xcode header plist tableview

我有一个表格视图,在IB中创建了一个添加的标题视图,用于在表格上方显示一些文本(无法发布屏幕截图 - http://i51.tinypic.com/2przbl5.jpg)。我想根据我的plist加载表格上方的文本,我使用objectforkey加载文本。但是当我连接IB中的插座时,文本消失了。这在标准的UIview中工作,所以我不确定在表视图中我缺少什么。我是新手编码所以也许有更好的方法来做这个或我做错了什么?感谢。

.h file _________________________________________________


#import <UIKit/UIKit.h>
@interface TourOverviewController : UITableViewController {

 NSArray *points;
 NSDictionary *tour;
 IBOutlet UITextField *nameTextField;
 IBOutlet UITextView *pointsTextView;
}

@property (nonatomic, retain) NSArray *points;
@property (nonatomic, retain) NSDictionary *tour;
@property (nonatomic, retain) UITextField *nameTextField;
@property (nonatomic, retain) UITextView *pointsTextView;


@end

.m file______________________________________________________

    #import "TourOverviewController.h"
#import "LoadingNames.h"

@implementation TourOverviewController
@synthesize points, tour, nameTextField, pointsTextView, 

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

 nameTextField.text = [tour objectForKey:NAME_KEY];
 pointsTextView.text = [tour objectForKey:DIRECTIONS_KEY];  
}


- (void)viewDidLoad { 
 NSArray *array = [[NSArray alloc] initWithObjects:@"Toy Story",
                      @"A Bug's Life", @"Toy Story 2", @"Monsters, Inc.", 
                      @"Finding Nemo", @"The Incredibles", @"Cars", 
                      @"Ratatouille", @"WALL-E", nil];
    self.points = array;
    [array release];
    [super viewDidLoad];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return [points count];
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    NSUInteger row = [indexPath row];
    NSString *rowString = [points objectAtIndex:row];
    cell.textLabel.text = rowString;
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    [rowString release];

    return cell;
}

@end

2 个答案:

答案 0 :(得分:0)

我不确定我理解你的问题,但你可以创建2个plist,points和tour,然后用plist的内容填充你的Mutable数组和字典。

编辑*的 * ** * ** * ** * ** * ** * ** * ** * ** * **

我以前错过了这个,但也许就像添加@“”那样简单。

[tour objectForKey:@"NAME_KEY"];

如果您想因任何原因更改其中的数据,您应该使您的数组和字典可变。

以下是获取plist并填充数组或字典的代码(确保在填充时将plists设置为适当的类型)

将它放在viewDidLoad方法

NSString *pointsList = [[NSBundle mainBundle] 
  pathForResource:@"points" ofType:@"plist"];
  points = [[NSMutableArray alloc]initWithContentsOfFile: pointsList];

NSString *tourList = [[NSBundle mainBundle] 
  pathForResource:@"tour" ofType:@"plist"];
  tour = [[NSMutableArray alloc]initWithContentsOfFile: tourList];

然后你的数组和字典填充了plist的内容。

希望这会有所帮助,也许我误解了你想要做什么。

答案 1 :(得分:0)

通常在使用UITableViewController时,您尝试显示的文本必须放在表头中。 以下是如何向表头添加标签:

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,300,100)];
UILabel *header = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 50)];
[header setTextColor:[UIColor redColor]];
[header setText:@"Some Text"];
[headerView addSubview:header];

[self.tableView setTableHeaderView:headerView];