如何使用UISegmentControl来更改CoreData的detailViewController

时间:2011-04-29 10:19:26

标签: iphone objective-c cocoa-touch uisegmentedcontrol

我已经实现了一个UISegmentControl作为我的detailViewController的rightBarButton。 此视图控制器显示从UITableView传递的信息。 这个UITableView的单元格填充了CoreData属性值。

我想要做的是让用户通过detailViewController在列表中上下移动。他们不必让用户必须返回rootViewController,而是可以通过UISegmentControl滚动浏览。

我目前在我的detailViewController.m

中有这个
 - (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
 // Setting up UISegmentedControl

// Segmented Control - Custom right bar button with a view
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:
                                        [NSArray arrayWithObjects:
                                         [UIImage imageNamed:@"arrowdown.png"],
                                         [UIImage imageNamed:@"arrowup.png"],
                                         nil]];

[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];

segmentedControl.frame = CGRectMake(0, 0, 75, 30);
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.momentary = YES;

UIBarButtonItem *segmentBarItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
[segmentedControl release];

self.navigationItem.rightBarButtonItem = segmentBarItem;
[segmentBarItem release];
  }

然后将其附加到以下方法,以检测轻敲控件。

 - (void)segmentAction:(id)sender
 {
UISegmentedControl* segCtl = sender;
// the segmented control was clicked, handle it here 

if([segCtl selectedSegmentIndex]==0){
    NSLog(@"You clicked the down arrow - the segment clicked was %d", [segCtl selectedSegmentIndex]);
}else {

    NSLog(@"You clicked the up arrow - the segment clicked was %d", [segCtl selectedSegmentIndex]);

}



}

我也很好奇是否有人知道如何检测是否还有。因此,如果加载的音符位于第一个位置,则禁用向下箭头,如果加载的音符位于最后位置,则禁用向上箭头。这甚至可能吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我建议你创建一个正式的协议 MyDataSource ,它提供了访问数据的方法。作为最低要求,必须有一种方法来获取指定索引的数据对象和对象的数量。

在DetailViewController中,您应该引用符合MyDataSource的对象。我建议你使用RootViewController实例作为DetailViewController的数据源。

您还应该跟踪DetailViewController中当前显示的对象的索引并适当地更新UI。