0

TableView を並べ替えるために、NavigationBar に「並べ替え」ボタンを追加しました。TableView は次のように構築されます。

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *myfile = [[NSBundle mainBundle]
                    pathForResource:@"Object" ofType:@"plist"];

    sortedObjectes = [[NSMutableArray alloc]initWithContentsOfFile:myfile];

    NSSortDescriptor * sortDesc = [[NSSortDescriptor alloc] initWithKey:@"Popularity" ascending:YES];
    [sortedObjects sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
    [super viewDidLoad];
 }

これは、並べ替えボタンのアクションです。

- (IBAction)SortButton:(id)sender;

{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sort by" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Name", @"Country", @"Popularity", nil];                                                                                                                                   
[alert show];
[alert release];
}

そして、これはボタンのクリックをキャッチするデリゲート メソッドです。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
    //Sort by name
    }
    else if (buttonIndex == 1)
    {
    //Sort by country
    }
    else if (buttonIndex == 2)
    {
    //Sort by popularity
    }
}

ClickedButtonAtIndex で SortDescriptor メソッドを実装し、TableView を更新するにはどうすればよいですか?

デフォルトでテーブルビューを人気順にソートしたい。

Plist 構造 (辞書の配列):

plist version="1.0">
array>
    dict>
    key>Country /key>
    string>Italy /string>
    key>Name /key>
    string>Fezzudo /string>
            key>Popularity /key>
            integer>1 /integer>
        /dict>
   dict>
    key>Country /key>
    string>Spanin /string>
    key>Name /key>
    string>Alamos Malbec /string>
            key>Popularity /key>
            integer>2 /integer>
       /dict>
/array>
/plist>

表示するためにhtmlコードの先頭を削除する必要がありました..それは混乱しているように見えるので、誰かが私のためにそれを修正する方法を知っていると思います..

4

2 に答える 2

1
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSSortDescriptor *sortDesc;
switch (buttonIndex) {
    case 0:
        return;
        break;
    case 1:
        sortDesc = [[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES];
        break;
    case 2:
        sortDesc = [[NSSortDescriptor alloc] initWithKey:@"Country" ascending:YES];
        break;
    case 3:
        sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"Popularity" ascending:NO comparator:^(id obj1, id obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }];
        break;
    }
    [sortedObjects sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
    [self.tableView reloadData];
}
于 2012-07-12T02:57:59.170 に答える
0

2 つ以上のボタン (オプション) を表示するには、UIAlertView よりも UIACtionSheet を使用することをお勧めします。ポップアップ メニューに最大 10 個のボタンが必要なので、アクション シートの方が適しています。

于 2012-07-12T18:12:20.883 に答える