我在使用UITableView的reloadData方法时遇到了一些麻烦.我发现如果添加或删除了新的单元格,它只调用cellForRowAtIndexPath.
示例:我有五个单元格,每个单元格包含五个字符串.如果我添加一个新的单元格并调用reloadData,表格会更新,我会看到它.然而,如果我进入五个单元格中的一个,添加一个新字符串,然后返回并调用reloadData,则不会调用任何表视图的委托方法.
我的问题:是否可以强制表视图完全重载所有可见单元格中的数据?
我想知道tableView上的reloadData是多么昂贵.我想每5秒刷新一次tableview.这会导致任何性能问题吗?
我对此很陌生.我花了几个小时来讨论关于这个主题的各种问题,但找不到适合我问题的答案.
我有一个viewcontroller(不是tableviewcontroller)与tableview作为子视图.我的问题是如何在视图控制器的:viewwillappear方法中重新加载表数据.在方法内部,我无法"访问"tableview实例.(另外我理解我不能使用reloaddata()因为我不使用tableviewcontroller).
你知道任何简单的解决方案吗?(我非常假设一个协议可以帮助吗?)
这是简短的代码:
class ViewController3: UIViewController, UITableViewDataSource, UITableViewDelegate {
var Person_data = [Person]()
override func viewDidLoad() {
super.viewDidLoad()
let tb: UITableView = UITableView(frame: CGRect(x: 10, y: 50, width: 200, height:600), style: UITableViewStyle.Plain)
tb.dataSource = self
tb.delegate = self
super.view.addSubview(tb)
fetch_data()
}
func tableView(tableview: UITableView, numberOfRowsInSection section: Int) -> Int {
let rows = Person_data.count
return rows
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell: UITableViewCell = UITableViewCell()
cell.textLabel?.text = Person_data[indexPath.row].name
return cell
}
override func …Run Code Online (Sandbox Code Playgroud) 我如何从自定义tableViewCell向tableView发送reloadData消息?
我已经附上了一个屏幕转储,以便更容易理解.
我已经附加了数据源和委托的插座,我已经为我的表视图创建了一个插座,但是reloadData不起作用?
理想情况下,我只想在视图加载一次后才调用reloadData?

这是我的重装功能
- (void) reloadTable:(id)sender
{
NSLog(@"Reload Table");
NSLog(@"%@",[appDelegate queryList]);
[self.driverTable reloadData];
[self.driverTable setNeedsLayout];
[self.driverTable setNeedsDisplay];
}
Run Code Online (Sandbox Code Playgroud)
这是我从webservice接收数据后调用它的地方
if( [elementName isEqualToString:@"Response"]) {
Response = NO;
LookupView *lookupView = [[LookupView alloc] initWithNibName:@"LookupView" bundle:nil];
[lookupView reloadTable:self];
}
Run Code Online (Sandbox Code Playgroud)
我现在遇到的问题是在按下查找按钮并接收数据后进行搜索.该表不会刷新新数据.如果我再次按下查找按钮再次调用相同的功能,表格将重新加载.现在我知道数据存在,因为我在调用表重新加载之前打印出数组.
有什么想法吗?
问题是UI出现然后得到更新:产生闪烁的影响.
我希望UI只在用户输入app时更新一次,因此我在ViewDidLoad中重新加载..这是代码..任何帮助如何消除这种闪烁...一些代码示例会有所帮助.
- (void)viewDidLoad {
[super viewDidLoad];
self.myTableView.dataSource = self;
self.myTableView.delegate = self;
PFQuery * getCollectionInfo = [PFQuery queryWithClassName:@"Collection"]; // make query
[getCollectionInfo orderByDescending:@"updatedAt"];
[getCollectionInfo setCachePolicy:kPFCachePolicyCacheThenNetwork];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
[getCollectionInfo findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
CollectionQueryResult = (NSMutableArray *)objects;
[self.tableView reloadData];
// whenevr get result
}
else{
//no errors
}
}];
});
Run Code Online (Sandbox Code Playgroud) 我有UITabBarController四个标签。在选择选项卡时显示的每个视图控制器中,我都有一个重置按钮。点击按钮将改变所有视图控制器的外观。特别是,它会改变不同视图控制器中某些标签的文本。
是否有一些推荐的方法可以同时更新 a 的所有视图控制器,UITabBarController即让它们重新加载视图?
我目前的方法是使这些视图控制器符合协议
@protocol XYReloadableViewController
- (void)reloadContents;
@end
Run Code Online (Sandbox Code Playgroud)
然后-reloadContents在点击按钮时将消息发送到所有视图控制器:
- (IBAction)touchUpInsideResetButton {
// ...
NSArray *viewControllers = self.tabBarController.viewControllers;
for (UIViewController<XYReloadableViewController> *viewController in viewControllers) {
[viewController reloadContents];
}
}
Run Code Online (Sandbox Code Playgroud)
然后在每个视图控制器中,我必须实现该方法:
- (void)reloadContents {
[self.tableView reloadData];
// other updates to UI ...
}
Run Code Online (Sandbox Code Playgroud)
但这似乎有点太复杂了。那么有没有更简单的方法来告诉视图控制器重新加载他们的视图?
编辑:如果我UINavigationController在某些选项卡或容器视图控制器中显示 a 会发生什么?我需要沿着所有子视图控制器的链传递消息......
应用程序在线时崩溃

Run Code Online (Sandbox Code Playgroud)class ImageValueCell: UITableViewCell, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var imagesList: UITableView! var imageArray: NSArray! override func awakeFromNib() { //super.awakeFromNib() // Initialization code imagesList.delegate = self; imagesList.dataSource = self; imageArray = NSArray() imagesList.reloadData() } func addImagesValue(objectList: NSMutableArray, machine: WIFIMachine){ imageArray = objectList imagesList.reloadData() //CRASHED HERE }}
我跟踪发现崩溃发生时 imageList 为零。这是一个在 Storyboard 上创建的带有 UITableView 的自定义单元格。谁能告诉我我可以尝试的可能解决方案?
我正在使用a UICollectionView并reloadItemsAtIndexPaths实现最高效率并免费获得动画.
不知何故,动画有时只会触发(可能会导致重用单元?)我创建了一个简单的项目,其中包含一个UIViewController,一个UICollectionView和一个UIButton来帮助我触发动画.
这是我的代码:
import UIKit
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
var cells = [1]
@IBOutlet weak var sampleCollectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
@IBAction func buttonPressed(sender: AnyObject) {
reloadVisibleSlides()
}
func reloadVisibleSlides() {
self.sampleCollectionView.reloadItemsAtIndexPaths(self.sampleCollectionView.indexPathsForVisibleItems())
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection …Run Code Online (Sandbox Code Playgroud) reloaddata ×10
ios ×9
uitableview ×6
swift ×3
tableview ×2
animation ×1
cocoa-touch ×1
iphone ×1
performance ×1
xcode6 ×1