Отображать динамические данные в UIPickerView на iPhone - PullRequest
1 голос
/ 27 мая 2011

Я использую NSXMLParsing и UIPickerView в моем приложении, но я не могу отобразить данные в представлении uipicker после разбора. Может кто-нибудь помочь мне об этой проблеме. Я просто хочу знать, как хранить данные в массиве и отображать их в uipickerview.

thnx frnds Спасибо mahboudz ... Я сделал то, что вы сказали, но это не работает .. на самом деле я проанализировал некоторые данные и сохранил их в nsmutablearray, используя словарь ... и хочу отобразить их в представлении uipicker, но он не работает .. мой код это: -

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

if ( [elementName isEqualToString:@"news"] ) {
    //msgAdded = [[attributeDict objectForKey:@"added"] retain];//fetch session from message tag.
    //msgId = [[attributeDict objectForKey:@"id"] intValue];//fetch id from message tag.
    newId = [[NSMutableString alloc] init];
    newsTitle =[[NSMutableString alloc]init];
    newsOverview = [[NSMutableString alloc]init];

    newsOfDay = [[NSMutableString alloc] init];
    createdOn = [[NSMutableString alloc]init];
    newsDescription = [[NSMutableString alloc]init];
    idNews = NO;
    ttlNews = NO;
    overvwNews = NO;
    dyNews = NO;
    onCreated = NO;
    desNews = NO;
    //inFromUserName = NO;

}
if ( [elementName isEqualToString:@"news_id"] ) {
    idNews = YES;
}
if ( [elementName isEqualToString:@"news_title"] ) {
    ttlNews = YES;
}
if ( [elementName isEqualToString:@"news_overview"] ) {
    overvwNews = YES;
}
if ( [elementName isEqualToString:@"is_news_of_the_day"] ) {
    dyNews = YES;
}
if ( [elementName isEqualToString:@"created_on"] ) {
    onCreated = YES;
}
if ( [elementName isEqualToString:@"news_description"] ) {
    desNews = YES;
}

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    if ( idNews ) {
        [newId appendString:string];
    }

if (ttlNews) {
    [newsTitle appendString:string];
}
if ( overvwNews ) {
    [newsOverview appendString:string];
    //NSLog(@"USER_NAME ===== %d",fromUserName);

}
if (dyNews) {
    [newsOfDay appendString:string];
}
if (onCreated) {
    [createdOn appendString:string];
}
if (desNews) {
    [newsDescription appendString:string];
    //  NSLog(@"MESSAGE ==== %@",chatComment);
}


}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if ( [elementName isEqualToString:@"news"] ) {

        //[news addObject:[NSDictionary dictionaryWithObjectsAndKeys:chatSession,@"chatSession",fromUserName,@"fromUserName",chatComment,@"chatComment",nil]];
        [messages addObject:[NSDictionary dictionaryWithObjectsAndKeys:newsTitle,@"title",newId,@"id",nil]];





}


if ( [elementName isEqualToString:@"news_id"] ) {
    idNews = NO;
}
if ( [elementName isEqualToString:@"news_title"] ) {
    ttlNews = NO;
}
if ( [elementName isEqualToString:@"news_overview"] ) {
    overvwNews = NO;
}
if ( [elementName isEqualToString:@"is_news_of_the_day"] ) {
    dyNews = NO;
}
if ( [elementName isEqualToString:@"created_on"] ) {
    onCreated = NO;
}
if ( [elementName isEqualToString:@"news_description"] ) {
    desNews = NO;
}

}

и теперь я хочу отобразить содержимое массива в представлении uipicker. то есть objectForKey: @ "newstitle"

я пробовал показывать через следующий код: -

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{

    UILabel *partyLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 37)];

    partyLabel.text=    [[messages objectAtIndex:row]objectForKey:@"title"];


    partyLabel.font = [UIFont boldSystemFontOfSize:13];
    partyLabel.textAlignment = UITextAlignmentCenter;
    partyLabel.backgroundColor = [UIColor clearColor];
    return partyLabel;
}

но это не работает ... пожалуйста, кто-нибудь может мне помочь ..

Thnx Кунал

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Я думаю, что сначала вам нужно проанализировать xml и сохранить данные в массив nsmutable, а затем вы должны отобразить данные в виде выбора из вашего массива

2 голосов
/ 27 мая 2011

Вы можете хранить проанализированные данные в любом формате, который пожелаете, например, в массиве NSArray или C.Когда UIPicker необходимо отобразить каждую строку, он вызовет одно из следующих действий, в зависимости от того, как вы управляете средством выбора:

– pickerView:titleForRow:forComponent:
– pickerView:viewForRow:forComponent:reusingView:

Вам необходимо реализовать только один из двух.Первый самый простой.Когда вас вызывают для каждой строки, просто возвращайте строку NSString, которую вы хотели бы отобразить в этой строке.Второй вариант более сложный, но позволяет вам иметь большую гибкость, такую ​​как форматирование строки или добавление изображений.

Если вы изменяете отображаемые данные после отображения UIPicker на экране, вам необходимо вызвать reloadComponent:или перезагрузите все компоненты, чтобы обновить отображение.

...