首先,single view
在storyboard里,拉出来一个navigationbar 然后把后面的tableview换成原来的那个viewcontroller
把viewcontroller里去掉原先继承的类
再拉一个tabbar进来
拉一个button在viewcontroller上面
然后连接button和tabbar
恩,就是这个样子
接着把tabbar后面全都换成tableviewcontroller(拉出来4个tableviewcontroller)
把所有的cell改成subtitle后连接一个viewcontroller
改一下segue
拉个webview在最后那个viewcontroller上
然后就可以写代码拉。。
首先写最后那个viewcontroller的类
把webview连接出来
新建两个属性,一个是获得weburl,一个是获得webtitle
- //
- // webNewsViewController.h
- // fixedOne
- //
- // Created by ioscourse on 13-4-16.
- // Copyright (c) 2013年 cct. All rights reserved.
- //
- #import <UIKit/UIKit.h>
- @interface webNewsViewController : UIViewController
- @property (weak,nonatomic) IBOutlet UIWebView *webView;
- @property (strong,nonatomic) NSString *webUrl;
- @property (strong,nonatomic) NSString *webTitle;
- @end
然后看 .m
- #import "webNewsViewController.h"
- @interface webNewsViewController ()
- @end
- @implementation webNewsViewController
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- // Custom initialization
- }
- return self;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
- // scale
- self.webView.scalesPageToFit = YES;
- // title
- self.navigationItem.title = self.title;
- // load html
- [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.webUrl]]];
- }
- - (void)didReceiveMemoryWarning
- {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- @end
然后在.pch里加上后面要用的xml
- #define focusNewsUrlOfXml @"http://RSS.sina.com.cn/news/marquee/ddt.xml"
- #define internationalNewsUrlOfXml @"http://RSS.sina.com.cn/news/world/focus15.xml"
- #define domesticNewsUrlOfXml @"http://RSS.sina.com.cn/news/china/focus15.xml"
- #define socialNewsUrlOfXml @"http://RSS.sina.com.cn/news/society/focus15.xml"
这个是对于tableview的抽象类的.h
- @property (strong,nonatomic) NSString *cellName;
- @property (strong,nonatomic) NSString *urlOfXml;
- @property (strong,nonatomic) NSMutableArray *pubdate;
- @property (strong,nonatomic) NSMutableArray *link;
- @property (strong,nonatomic) NSMutableArray *tit;
- @property (strong,nonatomic) NSMutableString *stringTemp;
- - (void)initWithTableViewName;
噢,那个,记得加载NSXMLParserDelegate和webviewcontroller的那个.h啊
然后viewdidload函数:
使用异步来做这个
- [self initWithTableViewName];
- dispatch_queue_t que = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);
- dispatch_async(que,^{
- NSURL *url = [NSURL URLWithString:self.urlOfXml];
- NSXMLParser *parser = [[NSXMLParser alloc]initWithContentsOfURL:url];
- [parser setDelegate:self];
- [parser parse];
- // 清空备用string
- self.stringTemp = nil;
- dispatch_async(dispatch_get_main_queue(),^{
- [self.tableView reloadData];
- });
- });
异步使用的具体情况,等过段时间我再写一篇
这个就是最开始segue改名的时候把原来的默认的叫item的那个标题改成新闻要闻之类的东西
- - (void)initWithTableViewName
- {
- if ([self.title isEqualToString:@"新闻要闻"]) {
- self.urlOfXml = focusNewsUrlOfXml;
- self.cellName = @"focusNewsCell";
- }
- else if ([self.title isEqualToString:@"国际新闻"]) {
- self.urlOfXml = internationalNewsUrlOfXml;
- self.cellName = @"internationalNewsCell";
- }
- else if ([self.title isEqualToString:@"国内新闻"]) {
- self.urlOfXml = domesticNewsUrlOfXml;
- self.cellName = @"domesticNewsCell";
- }
- else if ([self.title isEqualToString:@"社会新闻"]) {
- self.urlOfXml = socialNewsUrlOfXml;
- self.cellName = @"socialNewsCell";
- }
- }
然后解析xml
- - (void) parser:(NSXMLParser *)parser
- didStartElement:(NSString *)elementName
- namespaceURI:(NSString *)namespaceURI
- qualifiedName:(NSString *)qName
- attributes:(NSDictionary *)attributeDict
- {
- if ([elementName isEqualToString:@"title"]) {
- if (self.tit == nil) {
- self.tit = [[NSMutableArray alloc] init];
- }
- }
- if ([elementName isEqualToString:@"link"]) {
- if (self.link == nil) {
- self.link = [[NSMutableArray alloc] init];
- }
- }
- else if ([elementName isEqualToString:@"pubDate"]){
- if (self.pubdate == nil) {
- self.pubdate = [[NSMutableArray alloc] init];
- }
- }
- }
- - (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
- if (self.stringTemp == nil)
- self.stringTemp = [[NSMutableString alloc] init];
- [self.stringTemp appendString:string];
- }
- - (void) parser:(NSXMLParser *)parser
- didEndElement:(NSString *)elementName
- namespaceURI:(NSString *)namespaceURI
- qualifiedName:(NSString *)qName
- {
- if ([elementName isEqualToString:@"title"]) {
- [self.tit addObject:self.stringTemp];
- }
- else if ([elementName isEqualToString:@"link"]) {
- [self.link addObject:self.stringTemp];
- }
- else if ([elementName isEqualToString:@"pubDate"]) {
- [self.pubdate addObject:self.stringTemp];
- }
- self.stringTemp = nil;
- }
获得标签为title的两个之间的内容存在stringtmp里面
然后当找到第二个title的时候把这个字符串赋值给对应的属性
然后设定行数为日起
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
- {
- // Return the number of rows in the section.
- return [self.pubdate count] - 2;
- }
设定为出版日期数组的个数减去2
为什么减去2
可以看一下xml源码
可以发现第一个和最后一个是不大对的,所以要去掉
- cell.textLabel.text = self.tit[indexPath.row+2];
- cell.detailTextLabel.text = self.pubdate[indexPath.row+1];
准备
- NSMutableString *str = [[NSMutableString alloc] init];
- [str appendString:[self.link objectAtIndex:self.tableView.indexPathForSelectedRow.row+2]];
- [str deleteCharactersInRange:NSMakeRange(0,4)];
- [segue.destinationViewController setWebUrl:str];
- [segue.destinationViewController setWebTitle: segue.identifier];
然后link前有空格要删掉一些才可以用
恩,就这样啦,给个demo