2014-02-17 3 views
4

Я хочу реализовать Потяните, чтобы обновить до моего UITableViewController с помощью UIRefreshControl. Вот что я пробовал до сих пор.UIRefreshControl не показывает индикатор или заголовок?

- (void)viewDidLoad 
    { 
    ..... 
    ////********* Pull to refresh ************/ 
     UIRefreshControl *refresh = [[UIRefreshControl alloc] init]; 
     refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"]; 
     refresh.tintColor = [UIColor magentaColor]; 
    // [self.tableView addSubview:refresh]; 
// [self.refreshControl setEnabled:YES]; 
     [refresh addTarget:self action:@selector(pullToRefresh:) forControlEvents:UIControlEventValueChanged]; 
     self.refreshControl = refresh; 

    } 
    -(void)pullToRefresh:(UIRefreshControl *)refresh { 
     [refresh beginRefreshing]; 
     refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Refreshing.."]; 
     [self loadRecentActivities]; 
    } 

Но когда я тянуть Tableview ни индикатор активности, ни название видна, однако pullToRefresh называется и таблица refreshed.My приложение поддерживает iOS7.0 +. Что мне не хватает? Любая помощь будет оценена по достоинству?

Edit: I'v пытался с [self.refreshControl setEnabled:YES]; и [self.refreshControl setEnabled:YES];, как указано в моем редактируемого кода, но до сих пор не повезло. Это как мой TableView выглядит, когда я тянуть его refresh- enter image description here

Final Solution: Для просмотра таблицы фона я использовал

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]]; 
self.tableView.backgroundView = imageView; 

Обновить индикатор и заголовок был скрыт за self.tableView.backgroundView вместо этого использовать

[self.tableView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]]]; 

и он решает проблему. также большое спасибо Balram Tiwari, пожалуйста, см. его ответ, если у вас все еще есть проблемы.

+0

UITableViewController уже имеет refreshControl, вам не нужно добавлять еще один. – Pawan

+0

Эта строка прокомментирована в моем коде, и это не имеет никакого значения. – Bharat

+0

call [refresh beginRefreshing]. в pullToRefresh вот и все.когда ваша задача завершена [refresh endRefreshing]; – Pawan

ответ

7

На самом деле у вас есть контроллер обновления в таблицеView, но он находится за навигационной панелью. (Звучит по-другому, справа). Вот уловка,

Когда вы используете код в iOS7, по умолчанию UIViewController занимает весь экран (edgesForExtendedLayout). Это означает, что ваш (0,0) начнется с верхнего левого угла под навигационной панелью.

Так что ваш tableView на самом деле начинается оттуда. Поэтому, чтобы избавиться от него, вы просто указываете edgesForExtendedLayout для своего viewController в своем методе viewDidLoad.

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
    self.edgesForExtendedLayout = UIRectEdgeNone; 

После этого оно должно быть видимым.

  • Перед тем выше Фикс:

Before Fix

  • После устранения проблем.

After the Fix

надежда, что помогает.

+0

Также просто раскомментируйте эту строку. '[self.tableView addSubview: refresh];' –

+0

Его не работает для меня..также я думаю, что это не из-за edgeForExtendedLayout, как вы можете видеть, есть пространство (помечено как красный прямоугольник), когда обновляется мой tableview. – Bharat

+0

FYI I'v добавил subview на self.navigationController.view (см. «Активность звонка/разговора на скриншоте»), и я попытался удалить это, но индикатор обновления не отображается в обоих случаях. – Bharat

11

Просто добавьте self.tableView.backgroundView.layer.zPosition -= 1; под кодом инициализации для refreshControl.

+1

Это решение работает нормально. Мое фоновое изображение спрятало 'UIRefreshControl' в моем случае ... –

Смежные вопросы