2014-01-20 24 views
1

我有一个UITableView,我试图给出一个清晰的背景来显示背景中的ImageView,但背景是白色的,我不知道为什么。UITableView具有白色背景而不是清晰

这里是我的代码:

#import "GRSYouTubeFeed.h" 
#import "RSSChannel.h" 
#import "RSSItem.h" 
#import "WebViewController.h" 
#import "DTCustomColoredAccessory.h" 
#import "SVProgressHUD.h" 
#import "TWTSideMenuViewController.h" 
#import "UIImage+ImageEffects.h" 

@implementation GRSYouTubeFeed 
{ 
    UIActivityIndicatorView *loadingIndicator; 
} 
@synthesize webViewController; 

- (void)viewDidLoad 
{ 
    UIImage *normalBackground = [UIImage imageNamed:@"MenuBackground.png"]; 
    UIImage *effectImage = [normalBackground applyDarkEffect]; 
    UIImageView *blurredBackground = [[UIImageView alloc]init]; 
    blurredBackground.image = effectImage; 

    UIBarButtonItem *openItem = [[UIBarButtonItem alloc] initWithTitle:@"Menu" style:UIBarButtonItemStylePlain target:self action:@selector(openButtonPressed)]; 
    self.navigationItem.leftBarButtonItem = openItem; 

    self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; 
    self.tableView.backgroundColor = [UIColor clearColor]; 
    [self.tableView setBackgroundView:blurredBackground]; 
    self.title = @"YouTube"; 

    UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeRight:)]; 
    swipeRecognizer.direction = UISwipeGestureRecognizerDirectionRight; 
    [self.view addGestureRecognizer:swipeRecognizer]; 

    [[SVProgressHUD appearance]setHudBackgroundColor:[UIColor whiteColor]]; 
    [[SVProgressHUD appearance]setHudForegroundColor:[UIColor blackColor]]; 

    [SVProgressHUD showWithStatus:@"Loading"]; 
    // [SVProgressHUD showWithStatus:@"Loading" maskType:SVProgressHUDMaskTypeGradient]; 
} 

- (IBAction)swipeRight:(UIGestureRecognizer *)sender 
{ 
    [self.sideMenuViewController openMenuAnimated:YES completion:nil]; 
} 

- (void)openButtonPressed 
{ 
    [self.sideMenuViewController openMenuAnimated:YES completion:nil]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [SVProgressHUD dismiss]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    NSLog(@"%@ found a %@ element", self, elementName); 
    if ([elementName isEqual:@"channel"]) 
    { 
     // If the parser saw a channel, create new instance, store in our ivar 
     channel = [[RSSChannel alloc]init]; 

     // Give the channel object a pointer back to ourselves for later 
     [channel setParentParserDelegate:self]; 

     // Set the parser's delegate to the channel object 
     [parser setDelegate:channel]; 
    } 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // return 0; 
    NSLog(@"channel items %d", [[channel items]count]); 
    return [[channel items]count]; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 50; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // return nil; 
    UIImage *normalBackground = [UIImage imageNamed:@"MenuBackground.png"]; 
    UIImage *effectImage = [normalBackground applyDarkEffect]; 
    UIImageView *blurredBackground = [[UIImageView alloc]init]; 
    blurredBackground.image = effectImage; 

    tableView.backgroundView = blurredBackground; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"UITableViewCell"]; 
     cell.textLabel.font=[UIFont systemFontOfSize:16.0]; 
    } 
    RSSItem *item = [[channel items]objectAtIndex:[indexPath row]]; 

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
    [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ssZ"]; 
    NSDate *pubDate = [formatter dateFromString:[item date]]; 
    [formatter setDateStyle:NSDateFormatterMediumStyle]; 
    NSString *dateString = [formatter stringFromDate:pubDate]; 
    NSLog(@"Date String: %@", dateString); 

    [[cell textLabel]setText:[item title]]; 

    NSLog(@"Date: %@", [item date]); 

    tableView.backgroundColor = [UIColor clearColor]; 
    cell.textLabel.backgroundColor = [UIColor clearColor]; 
    cell.textLabel.textColor = [UIColor whiteColor]; 

    DTCustomColoredAccessory *accessory = [DTCustomColoredAccessory accessoryWithColor:cell.textLabel.textColor]; 
    cell.accessoryView =accessory; 

    return cell; 
} 

- (void)fetchEntries 
{ 
    // Create a new data container for the stuff that comes back from the service 
    xmlData = [[NSMutableData alloc]init]; 

    // Construct a URL that will ask the service for what you want - 
    // note we can concatenate literal strings together on multiple lines in this way - this results in a single NSString instance 
    NSURL *url = [NSURL URLWithString:@"http://gdata.youtube.com/feeds/base/users/LittleHeartRecords/uploads?alt=rss&v=2&orderby=published&client=ytapi-youtube-profile"]; 

    // Put that URL into an NSURLRequest 
    NSURLRequest *req = [NSURLRequest requestWithURL:url]; 

    // Create a connection that will exchange this request for data from the URL 
    connection = [[NSURLConnection alloc]initWithRequest:req delegate:self startImmediately:YES]; 
} 

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 

    if (self) 
    { 
     [self fetchEntries]; 
    } 

    return self; 
} 

// This method will be called several times as the data arrives 
- (void)connection:(NSURLConnection *)conn didReceiveData:(NSData *)data 
{ 
    // Add the incoming chunk of data to the container we are keeping 
    // The data always comes in the correct order 
    [xmlData appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)conn 
{ 
    /* We are just checking to make sure we are getting the XML 
    NSString *xmlCheck = [[NSString alloc]initWithData:xmlData encoding:NSUTF8StringEncoding]; 
    NSLog(@"xmlCheck = %@", xmlCheck);*/ 

    // [loadingIndicator stopAnimating]; 
    [SVProgressHUD dismiss]; 

    // Create the parser object with the data received from the web service 
    NSXMLParser *parser = [[NSXMLParser alloc]initWithData:xmlData]; 

    // Give it a delegate 
    [parser setDelegate:self]; 

    //Tell it to start parsing - the document will be parsed and the delegate of NSXMLParser will get all of its delegate messages sent to it before this line finishes execution - it is blocking 
    [parser parse]; 

    // Get rid of the XML data as we no longer need it 
    xmlData = nil; 

    // Reload the table.. for now, the table will be empty 
    [[self tableView]reloadData]; 

    NSLog(@"%@\n %@\n %@\n", channel, [channel title], [channel infoString]); 
} 

- (void)connection:(NSURLConnection *)conn didFailWithError:(NSError *)error 
{ 
    // Release the connection object, we're done with it 
    connection = nil; 

    // Release the xmlData object, we're done with it 
    xmlData = nil; 

    [SVProgressHUD dismiss]; 

    // Grab the description of the error object passed to us 
    NSString *errorString = [NSString stringWithFormat:@"Fetch failed: %@", [error localizedDescription]]; 

    // Create and show an alert view with this error displayed 
    UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"Error" message:errorString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [av show]; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [[webViewController webView]loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; 

    // Push the web view controller onto the navigation stack - this implicitly creates the web view controller's view the first time through 
    // [[self navigationController]pushViewController:webViewController animated:YES]; 
    [self.navigationController pushViewController:webViewController animated:YES]; 

    // Grab the selected item 
    RSSItem *entry = [[channel items]objectAtIndex:[indexPath row]]; 

    NSLog(@"Channel Items: %@", [[channel items]objectAtIndex:[indexPath row]]); 

    // Construct a URL with the link string of the item 
    NSURL *url = [NSURL URLWithString:[entry link]]; 

    NSLog(@"Link: %@", [entry link]); 

    // Construct a request object with that URL 
    NSURLRequest *req = [NSURLRequest requestWithURL:url]; 

    NSLog(@"URL: %@", url); 

    // Load the request into the web view 
    [[webViewController webView]loadRequest:req]; 
    webViewController.hackyURL = url; 
    NSLog(@"Request: %@", req); 

    NSLog(@"Title: %@", [entry title]); 

    NSLog(@"Pub Date: %@", [entry date]); 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

@end 

这是我的结果:

enter image description here

+0

我编辑了我的答案告诉你如何删除分隔符以及incase那些将是一个问题 –

+0

谢谢。我已经知道如何做到这一切。我只是忘了让单元格背景清晰,并忽略它。 – raginggoat

回答

3

您还需要设置clearColor作为背景色您的所有细胞。

2

你的问题是tableViewCells是白色为好,试试这个:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [cell setBackgroundColor:[UIColor clearColor]]; 
} 

你可能也需要这个隐藏分离器,只是一个猜测:

[tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; 
1
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"UITableViewCell"]; 
     cell.textLabel.font=[UIFont systemFontOfSize:16.0]; 
     //add following code 
     cell.backgroundColor = [UIColor clear]; 
    } 
0

也许你还想做

[blurredBackground setFrame: self.tableView.frame];