Заголовок представления заголовка перезаписывается с помощью унаследованного контроллера

Я пытаюсь получить доступ к свойствам и объектам, которые объявлены в одном контроллере представления, на страницу, где они мне нужны. Сделал это, создав подкласс контроллера представления. Но у меня здесь проблема: унаследованный контроллер перезаписывает контроллер. Я имею в виду, что панель навигации и представление заголовка подклассированного контроллера отображаются в используемом представлении. Когда я удаляю метод [super viewDidLoad], значения, которые необходимо отображать, не отображаются. Также представление заголовка унаследованного представления контроллер отображается. Я сделал подкласс, используя следующее утверждение: я также публикую код:

ERViewEditController class:

    @interface ERViewEditController:ERAddReminderController
    {

        UITableView *theTable;

    }

    @property(nonatomic,retain) IBOutlet UITableView *theTable;

    @end

    @implementation ERViewEditController

    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
     - (void)viewDidLoad
     {
         self.view.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"bg.jpg"]];
         self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(pop:)];
         self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Edit" style:UIBarButtonItemStylePlain target:self action:@selector(edit:)];

         [self setTitle:@"Reminders Listed"];

         [self.theTable reloadData];
         [super viewDidLoad];
     }

    - (UITableViewCell *)tableView:(UITableView *)view cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {

        NSString *CellId = [NSString stringWithFormat:@"S%1dR%1d",indexPath.section,indexPath.row];

        UITableViewCell *cell = (UITableViewCell *)[view dequeueReusableCellWithIdentifier:CellId];

        UILabel *label1 = [[[UILabel alloc]initWithFrame:CGRectMake(54, 3, 100, 40)]autorelease];
        label1.backgroundColor = [UIColor clearColor];
        label1.textColor = [UIColor whiteColor];

        UILabel *label2 = [[[UILabel alloc]initWithFrame:CGRectMake(119, 3, 100, 40)]autorelease];
        label2.backgroundColor = [UIColor clearColor];
        label2.textColor = [UIColor whiteColor];

        UILabel *label3 = [[[UILabel alloc]initWithFrame:CGRectMake(198, 3, 100, 40)]autorelease];
        label3.backgroundColor = [UIColor clearColor];
        label3.textColor = [UIColor whiteColor];

        if (cell == nil)
        {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellId] autorelease];
            view.backgroundColor = [UIColor clearColor];
            cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"reminderbutton.png"]];

            if (indexPath.section == 0) 
            {
                UILabel *label = [[[UILabel alloc]initWithFrame:CGRectMake(20, 3, 280, 40)]autorelease];
                label.backgroundColor = [UIColor clearColor];
                label.text = @" ID   Name     Event          Date";
                label.textColor = [UIColor cyanColor];
                [cell addSubview:label];
            }   

            else if (indexPath.section == 1)
            {
                const char *dbpath = [databasePath UTF8String];
                sqlite3_stmt *statement;

                if (sqlite3_open(dbpath, &remindersDB) == SQLITE_OK)
                {
                    NSString *querySQL = [NSString stringWithFormat:@"SELECT name,event,date FROM reminders"];

                    const char *query_stmt = [querySQL UTF8String];

                    if (sqlite3_prepare_v2(remindersDB ,query_stmt , -1, &statement, NULL) == SQLITE_OK)
                    {
                        if (sqlite3_step(statement) == SQLITE_ROW)
                        {
                            NSString *nameField = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];

                            NSString *eventField = [[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)];                    

                            NSString *dateField = [[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)];

                            [nameField stringByAppendingString:eventField];

                            label1.text = nameField;
                            label2.text = eventField;
                            label3.text = dateField;
                        } 

                        sqlite3_finalize(statement);
                    }
                    sqlite3_close(remindersDB);
                }

                switch (indexPath.row) 
                {
                    case 0:
                        [cell addSubview:label1];
                        [cell addSubview:label2];
                        [cell addSubview:label3];
                        break;

                    default:
                        break;
                }

            }

        }

        return cell;

    }


My navigation bar issue is resolved,now I have still been facing the header view title issue,I used the following code to fix:

-(NSString *)tableView:(UITableView *)atableView titleForHeaderInSection:(NSInteger)section
{
    return @"";
}

но не работает, пожалуйста, помогите мне выбраться из этого, спасибо мистеру Бену за ответ :)

Также у меня есть еще одна проблема, пожалуйста, проверьте и ее, если возможно, заранее спасибо :)

Заполните разделы табличного представления строками таблица в базе данных sqlite в порядке


person Eshwar Chaitanya    schedule 30.11.2011    source источник


Ответы (1)


Ваше описание немного сбивает с толку, но похоже, что ваш суперкласс устанавливает информацию о заголовке/кнопке после того, как вы установили ее в подклассе. Измените порядок вашего viewDidLoad, чтобы [super viewDidLoad]; находится первым в функции, любые изменения подкласса будут применены после того, как суперкласс установит его.

person Ben    schedule 14.12.2011
comment
Бен Да, я понял, спасибо за ответ, который отлично сработал для проблемы с панелью навигации. Но представление заголовка все еще перезаписывается унаследованным контроллером представления, пожалуйста, помогите мне решить и эту проблему! - person Eshwar Chaitanya; 16.12.2011
comment
Пожалуйста, ознакомьтесь с отредактированным ответом и снимком экрана, мистер Бен, заранее спасибо :) - person Eshwar Chaitanya; 16.12.2011
comment
Бен, я нашел решение, почему отображается представление заголовка унаследованного контроллера... Поскольку контроллер представления является подклассом, все функции, такие как панель навигации, представление заголовка и т. д., появятся, следовательно, нам нужно реализовать все методы суперкласса ,т.е. Как я реализовал - (UIView *) tableView: (UITableView *) atableView viewForHeaderInSection: (NSInteger) раздел в унаследованном контроллере с заголовками, нам нужно реализовать тот же метод и просто вернуть nil, который решит проблему. В любом случае, большое спасибо за терпения и ответа на мой вопрос,Еще раз спасибо...пока ТС. - person Eshwar Chaitanya; 16.12.2011