gpt4 book ai didi

iphone - 当我有多个部分时,如何以数字 0 开始我的 UITableView 部分?

转载 作者:可可西里 更新时间:2023-11-01 05:57:02 25 4
gpt4 key购买 nike

=> 我知道,这是个愚蠢的问题,但这对像我这样的新 iPhone 开发者来说更​​为重要。

这里我有与UITableView 部分 相关的问题:

第一个问题:我有一个问题,我如何从多个部分开始我的 UITableView 部分的编号 0?

例如:

我在 UITableViewnumberOfSectionsInTableView 委托(delegate)方法中有 11 个部分,我的部分首先从第 11 个部分开始,然后是 0,1,2,3, 4、5、6、7、8、9 和 10。那么我怎样才能以 0 号开始我的节号,然后按原样。

第二个问题:titleForHeaderInSection 委托(delegate)方法中,我的 tableView 的所有部分都重复了 3 次。在当前的 ViewController 中,我向上或向下滚动 UITableView,然后部分显示正常(0 到 11),UITableView 的这个正常部分在重复部分 3 次后显示。

例如:

我在 titleForHeaderInSection 委托(delegate)方法中使用 NSLog (@"%d ", section ); 然后在控制台中显示如下

控制台输出:

2012-09-17 12:27:47.424 Quotes2You[1623:f803]  11 
2012-09-17 12:27:47.426 Quotes2You[1623:f803] 11
2012-09-17 12:27:47.427 Quotes2You[1623:f803] 11
2012-09-17 12:27:47.428 Quotes2You[1623:f803] 0
2012-09-17 12:27:47.429 Quotes2You[1623:f803] 0
2012-09-17 12:27:47.429 Quotes2You[1623:f803] 0
2012-09-17 12:27:47.430 Quotes2You[1623:f803] 1
2012-09-17 12:27:47.431 Quotes2You[1623:f803] 1
2012-09-17 12:27:47.431 Quotes2You[1623:f803] 1
2012-09-17 12:27:47.432 Quotes2You[1623:f803] 2
2012-09-17 12:27:47.433 Quotes2You[1623:f803] 2
2012-09-17 12:27:47.433 Quotes2You[1623:f803] 2
2012-09-17 12:27:47.434 Quotes2You[1623:f803] 3
2012-09-17 12:27:47.435 Quotes2You[1623:f803] 3
2012-09-17 12:27:47.436 Quotes2You[1623:f803] 3
2012-09-17 12:27:47.436 Quotes2You[1623:f803] 4
2012-09-17 12:27:47.437 Quotes2You[1623:f803] 4
2012-09-17 12:27:47.438 Quotes2You[1623:f803] 4
2012-09-17 12:27:47.438 Quotes2You[1623:f803] 5
2012-09-17 12:27:47.439 Quotes2You[1623:f803] 5
2012-09-17 12:27:47.439 Quotes2You[1623:f803] 5
2012-09-17 12:27:47.440 Quotes2You[1623:f803] 6
2012-09-17 12:27:47.441 Quotes2You[1623:f803] 6
2012-09-17 12:27:47.462 Quotes2You[1623:f803] 6
2012-09-17 12:27:47.463 Quotes2You[1623:f803] 7
2012-09-17 12:27:47.464 Quotes2You[1623:f803] 7
2012-09-17 12:27:47.465 Quotes2You[1623:f803] 7
2012-09-17 12:27:47.466 Quotes2You[1623:f803] 8
2012-09-17 12:27:47.466 Quotes2You[1623:f803] 8
2012-09-17 12:27:47.467 Quotes2You[1623:f803] 8
2012-09-17 12:27:47.472 Quotes2You[1623:f803] 9
2012-09-17 12:27:47.476 Quotes2You[1623:f803] 9
2012-09-17 12:27:47.478 Quotes2You[1623:f803] 9
2012-09-17 12:27:47.480 Quotes2You[1623:f803] 10
2012-09-17 12:27:47.481 Quotes2You[1623:f803] 10
2012-09-17 12:27:47.481 Quotes2You[1623:f803] 10
2012-09-17 12:27:47.487 Quotes2You[1623:f803] 0
2012-09-17 12:27:47.487 Quotes2You[1623:f803] 1
2012-09-17 12:27:47.489 Quotes2You[1623:f803] 2

首先重复所有部分 3 次,然后当我滚动 UITableView 然后部分从 0 开始(正常)

我的代码在这里:

ThirdViewController.h

@interface ThirdViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>
{
UITableView *tblCustomer;
NSArray *listOfsection;
}
@property (nonatomic,retain) UITableView *tblCustomer;
@property (nonatomic,retain) NSArray *listOfsection;

@end

ThirdViewController.m

@synthesize tblCustomer , listOfsection;

- (void)viewDidLoad
{
[super viewDidLoad];

self.tblCustomer = [[UITableView alloc] initWithFrame:CGRectMake(0,0,320,417) style:UITableViewStyleGrouped];
self.tblCustomer.delegate = self;
self.tblCustomer.dataSource = self;
[self.view addSubview:self.tblCustomer];

self.listOfsection = [[NSArray alloc] initWithObjects:@"Name", @"Company", @"Address", @"Email", @"Mobile", @"Phone", @"Potential", @"Sales Status", @"Genre", @"Distributor", @"Dist Rep", @"Internal Notes", nil];

}

#pragma mark - UITableView Datasource Methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView {
return [self.listOfsection count];
}

- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section
{
int numSection=0;

if (section == 2)
numSection = 5;
else
numSection = 1;

return numSection;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// here is my code cellForRowAtIndexPath as section wise
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSLog(@" %d ", section);
NSString *sectionHeader = nil;

sectionHeader = [self.listOfsection objectAtIndex:section];

// here is section overwrite //

return sectionHeader;
}

#pragma mark - Memory Management

-(void)dealloc
{
[super dealloc];

[self.listOfsection release];
[self.tblCustomer release];
}

提前致谢

最佳答案

你问:

First Problem : i have question that how can i start my UITableView section with number 0 from multiple section ?

我认为您的惊愕源于这样一个事实,即它们不是以严格顺序的方式调用的。这就是它恰好起作用的方式,您无法更改此行为。显然,您的部分在应用程序中以正确的顺序出现,但它们恰好不会按顺序调用。这就是事件驱动编程的本质。但是,我在你的代码中没有看到任何基于这个执行顺序的中断,但也许你的代码中有一些你没有包含在这里的东西需要严格顺序调用这些方法,如果是这样,你会必须重构该代码。但是我在上面的代码片段中没有看到类似的东西。 UITableViewDataSource 委托(delegate)方法的性质意味着您可以(并且应该)以不依赖于调用单元格或部分的顺序的方式编写您的方法。永远不要依赖 UI 中的事件序列来控制如何构建 View 的底层模型。

second problem : in titleForHeaderInSection delegate method my all sections of tableView is repeat 3 times. and at current ViewController i scrolling UITableView up or down then section display as normal (0 to 11 ) this normal section of UITableView display after repetition of section 3 times.

如果它被连续调用三次,我会感到惊讶。我敢打赌(特别是考虑到您的日志显示格式略有不同的 NSLog 语句的证据)您的代码中某处还有其他 NSLog 语句。我会尝试将您的 NSLog 语句更改为:

NSLog(@"%s section=%d", __FUNCTION__, section);

这样,(a) 您知道它是从哪个方法记录的; (b) 通过在格式化字符串中添加描述性的 "section=",这意味着如果您永远不会对正在记录的数字感到困惑。我敢打赌,并非所有这三个 NSLog 语句都来自您的 titleForHeaderInSection。就个人而言,我不再在没有 __FUNCTION__ 引用的情况下将 NSLog 语句放入我的代码中,因为很容易混淆生成什么 NSLog声明。

但即使 titleForHeaderInSection 被多次调用,又如何呢? iOS 已经在后台进行了优化,可以做各种事情。了解正在发生的事情对我们有好处(例如,确保您不会在 titleForHeaderInSection 中做一些计算密集型或网络密集型事件之类的傻事),但现在是拥抱 serenity prayer 的时候了。并欣赏我们作为开发人员可以控制的东西,以及我们不能控制的东西。 (UITableViewDataSource 调用的顺序和数量是我们无法控制的事情之一。)只要您不是对方法进行冗余调用的来源(例如,执行不必要的 reloadData 调用),我不会为此担心。

总而言之,虽然如果 titleForHeaderInSection 被连续调用三次我会感到惊讶,但不要依赖它只被调用一次。我认为表格 View 可能会为表格的每个部分调用一次(可能是为了计算整个表格的高度,以便适当调整滚动条的大小),然后再次为屏幕上可见的部分调用一次(实际显示节标题)。

关于iphone - 当我有多个部分时,如何以数字 0 开始我的 UITableView 部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12455094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com