Как использовать UISegmentControl для изменения detailViewController в CoreData - PullRequest
0 голосов
/ 29 апреля 2011

Я реализовал UISegmentControl как rightBarButton моего detailViewController.Этот контроллер представления отображает информацию, передаваемую из 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 Ответ

1 голос
/ 02 мая 2011

Я бы предложил вам создать формальный протокол MyDataSource , который предоставляет методы для доступа к данным.Как минимум, должен быть метод для получения количества объектов данных и объекта для указанного индекса.

В вашем DetailViewController должна быть ссылка на объект, который соответствует MyDataSource.Я бы порекомендовал вам использовать экземпляр RootViewController в качестве источника данных для DetailViewController.

Следует также отслеживать индекс объекта, который в данный момент отображается в DetailViewController, и соответствующим образом обновлять пользовательский интерфейс.

...