2010-08-16 2 views
-2

как можно сделать вкладку iphone, которая загружает выбранные данные из массива и изменяется в зависимости от выбора пользователя.сделать вкладку фаворитов iphone

+0

Возможно. Однако ваш вопрос слишком расплывчатый. –

ответ

1

Alx,

Простой сценарий будет создать NIB на основе UITableViewCell (есть много учебников там для этого), который имеет метку на нем какое-то.

Что вы можете сделать, так это захватить содержимое этикетки, когда пользователь выбирает ячейку и сохраняет ее в изменяемом массиве, который затем хранится в NSUserDefaults.

Затем вы можете получить доступ к NSUserDefaults из другого представления и использовать его для заполнения закладки «Избранное», как вы просили.

Немного кода примера, который поможет (если исходные данные находятся в UITableView, как вы сказали в предыдущем вопросе). Я пишу это с моей головы (не проверенный код), поэтому вам придется выработать какие-либо ошибки, но идея правильная.

// in the .h file 
#import <UIKit/UIKit.h> 

@interface MyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> { 

    // set up a mutable array which allows editing of the array 
    NSMutableArray *myFavoritesData; 

} 
// set up a retained property 
@property (nonatomic, retain) NSMutableArray *myFavoritesData; 

@end 


// in the .m file 
// synthesize the getters/setters for your array 
@synthesize myFavoritesData; 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // find cell that was just pressed 
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

    // get pointer for the label that we want to identify the cell by 
    // the tag in this case is set to '5' in Interface Builder in the options for the label 
    UILabel *someLabel; 
    someLabel = (UILabel *)[cell viewWithTag:5]; 

    NSString *tmpFavorite = someLabel.text; 

    // get the count of the current array and use that for the "new" row since the count 
    // will always be 1 larger than the last object in the array (arrays start at 0, counts start at 1) 
    NSUInteger newRow = [self.myFavoritesData count]; 
    [self.myFavoritesData insertObject:tmpFavorite atIndex:newRow]; 

} 

// save the mutable array into NSUserDefaults when the view is about to disappear 
- (void) viewWillDisappear:(BOOL)animated 
{ 

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setObject:self.myFavoritesData forKey:@"MyFavorites"]; 

    // synchronize the data now instead of waiting for the OS to synchronize it at some 
    // arbitrary time in the future 
    [userDefaults synchronize]; 

} 

После того, как вы в новом контроллере представления, вы можете просто прочитать из NSUserDefaults и заполнить таблицу из массива. Например:

// favorites view controller 
- (void)viewDidLoad { 

    [super viewDidLoad]; 

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    NSMutableArray *tmpArray = [[NSMutableArray alloc] init]; 
    tmpArray = [[userDefaults objectForKey:@"MyFavorites"] mutableCopy]; 

     if ([tmpArray count] == 0) { 

      // 
      // no favorites have ever been saved 
      // 


     } else { 

      // load the favorites into some array you synthesized just like before 
      self.tableFavoritesData = [[NSMutableArray alloc] init]; 
      self.tableFavoritesData = [[userDefaults objectForKey:@"MyFavorites"] mutableCopy]; 

      NSLog(@"favorites data is %d and %@", [self.tableFavoritesData count], self.tableFavoritesData); 

} 

[tmpArray release]; 
} 

Тогда в вашем cellForRowAtIndexPath фаворитов просмотра контроллера вы просто получить доступ к каждой строке в каждом индексе массива (так, строка для индекса 0 будет идти в строке 0, строка для индекса 1 будет идти в строка 1 и т. д.), и это то, что заполнило бы ваш любимый стол!

Попробуйте это.

+0

спасибо большое, я получил структуру того, что im пытается получить сейчас ... одна небольшая проблема, связанная с тем, что я не хочу получать содержимое ячеек. Я хочу получить содержимое представления, которое отображается ячейкой. Я предполагаю, что вам нужно изменить этот код UILabel * someLabel; someLabel = (UILabel *) [вид ячейкиWithTag: 5]; NSString * tmpFavorite = someLabel.text; ? я попытался с помощью (? [[RootArray objectAtIndex: indexPath] установлено]; однако это действительно не работать :( –

+0

Как вы 'rootArray' определены Если он определен аналогично тому, как я определил мои изменяемые массивы выше, вы бы сделали: '[self.rootArray objectAtIndex.indexPath.row];' где 'indexPath.row' является int и указывает текущую строку нажатой – iwasrobbed

Смежные вопросы