ठीक है, मुझे पता है कि देर हो चुकी है लेकिन मुझे यह करना पड़ा। मैंने अब तक काम के समाधान की तलाश में 10 घंटे बिताए हैं, लेकिन पूर्ण उत्तर नहीं मिला। कुछ संकेत मिले लेकिन शुरुआत के लिए समझना मुश्किल था। इसलिए मुझे अपने 2 सेंट लगाने पड़े और जवाब पूरा करना पड़ा।
जैसा कि कुछ जवाबों में यह सुझाव दिया गया है कि एकमात्र कार्य समाधान जिसे मैं लागू करने में सक्षम था, तालिका दृश्य में सामान्य कोशिकाओं को सम्मिलित करके और उन्हें अनुभाग प्रमुख के रूप में संभालना है, लेकिन इसे प्राप्त करने का बेहतर तरीका इन कोशिकाओं को सम्मिलित करके है पंक्ति हर खंड की। इस तरह हम इन कस्टम नॉन-फ़्लोटिंग हेडर को बहुत आसानी से संभाल सकते हैं।
शैली UITableViewStylePlain के साथ UITableView लागू करें।
-(void) loadView
{
[super loadView];
UITableView *tblView =[[UITableView alloc] initWithFrame:CGRectMake(0, frame.origin.y, frame.size.width, frame.size.height-44-61-frame.origin.y) style:UITableViewStylePlain];
tblView.delegate=self;
tblView.dataSource=self;
tblView.tag=2;
tblView.backgroundColor=[UIColor clearColor];
tblView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
हमेशा की तरह titleForHeaderInSection को लागू करें (आप अपने स्वयं के तर्क का उपयोग करके यह मान प्राप्त कर सकते हैं, लेकिन मैं मानक प्रतिनिधियों का उपयोग करना पसंद करता हूं)।
- (NSString *)tableView: (UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSString *headerTitle = [sectionArray objectAtIndex:section];
return headerTitle;
}
हमेशा की तरह नंबरOfSectionsInTableView को लागू करें
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
int sectionCount = [sectionArray count];
return sectionCount;
}
हमेशा की तरह numberOfRowsInSection को लागू करें।
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
int rowCount = [[cellArray objectAtIndex:section] count];
return rowCount +1; //+1 for the extra row which we will fake for the Section Header
}
ऊँचाई में लौटें 0.0fHeaderInSection।
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 0.0f;
}
ViewForHeaderInSection को लागू न करें। शून्य वापस करने के बजाय पूरी तरह से विधि निकालें।
ऊंचाई में। जांचें कि क्या (indexpath.row == 0) और सेक्शन हेडर के लिए वांछित सेल की ऊँचाई वापस करें, अन्यथा सेल की ऊँचाई वापस करें।
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == 0)
{
return 80; //Height for the section header
}
else
{
return 70; //Height for the normal cell
}
}
अब CellForRowAtIndexPath में, देखें कि क्या (indexpath.row == 0) और सेल को लागू करें क्योंकि आप चाहते हैं कि अनुभाग हेडर हो और चयन शैली को कोई भी सेट न करें। ईएलएसई सेल को लागू करें जैसा कि आप चाहते हैं कि सामान्य सेल हो।
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 0)
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SectionCell"];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SectionCell"] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone; //So that the section header does not appear selected
cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SectionHeaderBackground"]];
}
cell.textLabel.text = [tableView.dataSource tableView:tableView titleForHeaderInSection:indexPath.section];
return cell;
}
else
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleGray; //So that the normal cell looks selected
cell.backgroundView =[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"CellBackground"]]autorelease];
cell.selectedBackgroundView=[[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectedCellBackground"]] autorelease];
}
cell.textLabel.text = [[cellArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row -1]; //row -1 to compensate for the extra header row
return cell;
}
}
अब कार्यान्वित करेंSelectRowAtIndexPath और रिटर्न nil यदि indexpath.row == 0. यह ध्यान रखेगा कि didSelectRowAtIndexPath कभी भी अनुभाग शीर्ष लेख पंक्ति के लिए निकाल नहीं जाता है।
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 0)
{
return nil;
}
return indexPath;
}
और अंत में didSelectRowAtIndexPath में, जांचें कि क्या (indexpath.row! = 0) और आगे बढ़ें।
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row != 0)
{
int row = indexPath.row -1; //Now use 'row' in place of indexPath.row
//Do what ever you want the selection to perform
}
}
इसके साथ ही आप कर रहे हैं। अब आपके पास पूरी तरह से स्क्रॉलिंग, नॉन-फ्लोटिंग सेक्शन हैडर है।