UITableview reloaddata с анимацией
Iam, имеющий UItableview, который заполняется из массива и выпадающего списка.
Если я выберу любую строку выпадающего списка, массив будет вставлен с новыми значениями, а tableview должен перезагрузиться.
Как оживить табличное представление с новым содержимым массива? заранее спасибо
как будто я хочу показать строку один за другим. Я пробовал этот метод
- (void)reloadRowsAtIndexPaths:(NSArray )indexPaths withRowAnimation:(UITableViewRowAnimation)animation {
NSIndexPath rowToReload = [NSIndexPath indexPathForRow:[names count] inSection:0];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[tableDetails reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
}
Ответы
Ответ 1
Чтобы добавить правильный ответ, если вы хотите перезагрузить разделы all в UITableView
, вам нужно будет сделать следующее:
ObjC
NSRange range = NSMakeRange(0, [self numberOfSectionsInTableView:self.tableView]);
NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:range];
[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationAutomatic];
Swift
let range = NSMakeRange(0, self.tableView.numberOfSections)
let sections = NSIndexSet(indexesIn: range)
self.tableView.reloadSections(sections as IndexSet, with: .automatic)
Это перезагрузит все в представлении таблицы анимацией. Как босс.
Ответ 2
используйте этот метод,
[_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
Ответ 3
Swift 3
UIView.transition(with: myTableView, duration: 1.0, options: .transitionCrossDissolve, animations: {self.myTableView.reloadData()}, completion: nil)
Swift 2
UIView.transitionWithView(myTableView, duration: 1.0, options: .TransitionCrossDissolve, animations: {self.myTableView.reloadData()}, completion: nil)
Я пошел с этим в Swift
Ответ 4
Сначала вы скажете, что tableView ожидает обновления с помощью beginUpdates
. Затем обновите соответствующие разделы (если ваш tableView имеет только один раздел, а затем просто пропустите нуль для номера раздела). Здесь, где вы указываете анимацию, вы можете поиграть с ней, чтобы получить необходимый эффект. После этого вы вызываете endUpdates
в tableView. В typedef для UITableViewRowAnimation указано:
typedef enum {
UITableViewRowAnimationFade,
UITableViewRowAnimationRight,
UITableViewRowAnimationLeft,
UITableViewRowAnimationTop,
UITableViewRowAnimationBottom,
UITableViewRowAnimationNone,
UITableViewRowAnimationMiddle,
UITableViewRowAnimationAutomatic = 100
} UITableViewRowAnimation;
Поиграйте, чтобы посмотреть, какой из них вы хотите. Даже выбор UITableViewRowAnimationNone
может иногда иметь хороший эффект. Код обновления таблицы ниже:
[self.tableView beginUpdates];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
Ответ 5
В Swift 3 вы можете просто добавить следующее extension
в UITableView
:
extension UITableView {
func reloadData(with animation: UITableView.RowAnimation) {
reloadSections(IndexSet(integersIn: 0..<numberOfSections), with: animation)
}
}
Ответ 6
вы можете использовать функции reloadSections:withRowAnimation:
. Проверьте Справочник по классу UITableView.
Проверьте reloadData with Animation, которые уже ответили на ваш вопрос.
Ответ 7
Ниже метод поддерживается tableView для анимации:
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
Использование:
//Reload tableView with animation
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationRight];
Доступны различные типы анимации:
typedef NS_ENUM(NSInteger, UITableViewRowAnimation) {
UITableViewRowAnimationFade,
UITableViewRowAnimationRight, // slide in from right (or out to right)
UITableViewRowAnimationLeft,
UITableViewRowAnimationTop,
UITableViewRowAnimationBottom,
UITableViewRowAnimationNone, // available in iOS 3.0
UITableViewRowAnimationMiddle, // available in iOS 3.2. attempts to keep cell centered in the space it will/did occupy
UITableViewRowAnimationAutomatic = 100 // available in iOS 5.0. chooses an appropriate animation style for you };
Надеюсь, это поможет!
Ответ 8
Я пробовал это, а мой Table
- Animated
с плавной анимацией
//Поместите этот код, где вы хотите перезагрузить представление таблицы
dispatch_async(dispatch_get_main_queue(), ^{
[UIView transitionWithView:<"TableName">
duration:0.1f
options:UIViewAnimationOptionTransitionFlipFromRight
animations:^(void) {
[<"TableName"> reloadData];
} completion:NULL];
});
Ответ 9
Попробуйте анимацию при переходе Изменение вида во время перезагрузки UITableView
[UIView transitionWithView:_yourTableView
duration:0.40f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^(void) {[_yourTableView reloadData];}
completion:nil];