我有一個tableview與頭部中的segmentedControl,我希望段控制改變數據取決於哪個段被點擊,在這種情況下即將/週刊。SegmentedControl更改TableView數據
兩個數據源都來自我的服務器上的XML文件,這與有問題的部分IM,作爲即時通訊還是新的使用的NSXMLParser
香港專業教育學院有一些代碼周圍亂,但無濟於事。我知道我的segmentAction正在被拾取,因爲我使用日誌來這樣做。附上代碼和我的表的形象,歡呼聲
當我點擊分段控件,使用新的XML源
:)
的實現代碼如下犯規更新RootViewController.h
#import <UIKit/UIKit.h>
@class XMLAppDelegate, BookDetailViewController;
@interface RootViewController : UITableViewController
<UITableViewDelegate>
{
XMLAppDelegate *appDelegate;
BookDetailViewController *bdvController;
UITableViewCell *eventUpCVCell;
UILabel *month;
UILabel *title;
UILabel *date;
UISegmentedControl *segmentedControl;
}
@property (nonatomic, retain) IBOutlet UITableViewCell *eventUpCVCell;
@property (nonatomic, retain) IBOutlet UISegmentedControl *segmentedControl;
@property (nonatomic, retain) IBOutlet UILabel *month;
@property (nonatomic, retain) IBOutlet UILabel *title;
@property (nonatomic, retain) IBOutlet UILabel *date;
@end
RootViewController.m
#import "RootViewController.h"
#import "XMLAppDelegate.h"
#import "Book.h"
#import "BookDetailViewController.h"
#define kLabel1Tag 1
#define kLabel2Tag 2
#define kLabel3Tag 3
@implementation RootViewController
@synthesize eventUpCVCell, segmentedControl;
@synthesize month, title, date;
-(void)viewDidLoad
{
appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate];
self.title = @"Upcoming Events";
[super viewDidLoad];
NSURL *urlUpcoming = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsUpcoming.xml"];
NSURL *urlWeekly = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsWeekly.xml"];
}
-(IBAction)segmentedAction:(id)sender
{
XMLAppDelegate *mainDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate];
segmentedControl = (UISegmentedControl *)sender;
if (segmentedControl.selectedSegmentIndex == 0)
{
mainDelegate.url = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsUpcoming.xml"];
[self.tableView reloadData];
}
else if (segmentedControl.selectedSegmentIndex == 1)
{
NSLog(@"Hello 2");
mainDelegate.url = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsWeekly.xml"];
[self.tableView reloadData];
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 66;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [appDelegate.eventDataUp count];
}
etc etc...
XMLAppDelegate.h
#import <UIKit/UIKit.h>
@interface XMLAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UINavigationController *navigationController;
NSString *url;
NSMutableArray *eventDataUp;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) NSString *url;
@property (nonatomic, retain) NSMutableArray *eventDataUp;
@end
XMLAppDelegate.m
#import "XMLAppDelegate.h"
#import "RootViewController.h"
#import "XMLParser.h"
@implementation XMLAppDelegate
@synthesize window;
@synthesize navigationController, eventDataUp;
@synthesize url;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
//RootViewController *rvController = [[RootViewController alloc] init];
NSURL *urlUpcoming = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsUpcoming.xml"];
// NSURL *urlWeekly = [[NSURL alloc] initWithString:@"http://www.randomosity.com.au/EventsWeekly.xml"];
NSURL *url = urlUpcoming;
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
//Initialize the delegate.
XMLParser *parser = [[XMLParser alloc] initXMLParser];
//Set delegate
[xmlParser setDelegate:parser];
//Start parsing the XML file.
BOOL success = [xmlParser parse];
if(success)
NSLog(@"No Errors");
else
NSLog(@"Error Error Error!!!");
// Configure and show the window
[window addSubview:[navigationController view]];
[window makeKeyAndVisible];
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Save data if appropriate
}
- (void)dealloc {
[eventDataUp release];
[navigationController release];
[window release];
[super dealloc];
}
@end
XMLParser的
#import <UIKit/UIKit.h>
@class XMLAppDelegate, Book;
@interface XMLParser : NSObject {
NSMutableString *currentElementValue;
XMLAppDelegate *appDelegate;
Book *eventUp;
}
- (XMLParser *) initXMLParser;
@end
//
// XMLParser.m
// XML
//
// Created by iPhone SDK Articles on 11/23/08.
// Copyright 2008 www.iPhoneSDKArticles.com.
//
#import "XMLParser.h"
#import "XMLAppDelegate.h"
#import "Book.h"
@implementation XMLParser
- (XMLParser *) initXMLParser {
[super init];
appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate];
return self;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"EventsUpcoming"]) {
//Initialize the array.
appDelegate.eventDataUp = [[NSMutableArray alloc] init];
}
else if([elementName isEqualToString:@"Event"]) {
//Initialize the book.
eventUp = [[Book alloc] init];
//Extract the attribute here.
eventUp.eventUpID = [[attributeDict objectForKey:@"id"] integerValue];
NSLog(@"Reading id value :%i", eventUp.eventUpID);
}
NSLog(@"Processing Element: %@", elementName);
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(!currentElementValue)
currentElementValue = [[NSMutableString alloc] initWithString:string];
else
[currentElementValue appendString:string];
NSLog(@"Processing Value: %@", currentElementValue);
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if([elementName isEqualToString:@"EventsUpcoming"])
return;
//There is nothing to do if we encounter the Books element here.
//If we encounter the Book element howevere, we want to add the book object to the array
// and release the object.
if([elementName isEqualToString:@"Event"]) {
[appDelegate.eventDataUp addObject:eventUp];
[eventUp release];
eventUp = nil;
}
else
[eventUp setValue:currentElementValue forKey:elementName];
[currentElementValue release];
currentElementValue = nil;
}
- (void) dealloc {
[eventUp release];
[currentElementValue release];
[super dealloc];
}
@end
什麼不起作用? – Joe 2011-06-11 07:34:18
分段控件不會更改XML源 – Andyy 2011-06-11 07:42:46