iOS didSelectRow и setString - PullRequest
       0

iOS didSelectRow и setString

1 голос
/ 01 октября 2011

Я создал список шрифтов через tableView, и когда пользователь вкладки любой из ячеек, строка шрифта должна быть изменена согласно ячейкам, но я не знаю, почему мой код не работает! мое табличное представление открывается с UIPopOverViewContoller: вот мой код:

.h

@interface FontViewController : UITableViewController <UITableViewDelegate , UITableViewDataSource ,  UINavigationControllerDelegate>  {

        NSMutableArray *listOfFonts;

    }
@property (nonatomic, retain)  NSMutableArray *listOfFonts;

#import "FontViewController.h"

#import "xxxAppDelegate.h"
#import "xxxViewController.h"

@implementation FontViewController


- (void)viewDidLoad
{

    listOfFonts = [[NSMutableArray alloc] init];
    [listOfFonts addObject:@"font1"];
    [listOfFonts addObject:@"font2"];
    [listOfFonts addObject:@"font3"];
    [listOfFonts addObject:@"font4"];
}


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

    //TableView Codes ....

    cell.textLabel.text = [listOfFonts objectAtIndex:indexPath.row];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    xxxAppDelegate *appDelegate = 
    [[UIApplication sharedApplication] delegate];

    appDelegate.viewController.detailItem = [listOfFonts objectAtIndex:indexPath.row];     
}

xxxViewController.h:

@interface {

 NSString *fontString;
    id detailItem;

}


@property (nonatomic ,retain) NSString *fontString;
@property (nonatomic, retain) id detailItem;

xxxViewController.m:

@synthesize detailItem ,fontString;



- (void)setDetailItem:(id)newDetailItem {

    if (detailItem != newDetailItem) {
        [detailItem release];
        detailItem = [newDetailItem retain];

        //---update the view---
        fontString = [detailItem description];
    }

}

//here is the custom font codes : (I am using special fonts which does not works with UIApplicationFont in app plist)


 (CTFontRef)newCustomFontWithName:(NSString *)fontName
                            ofType:(NSString *)type
                        attributes:(NSDictionary *)attributes
{

// the string of cell should be equal to the pathForResource:fontString for example font1 , font 2 ...

    NSString *fontPath = [[NSBundle mainBundle] pathForResource:fontString = [detailItem description] ofType:@"ttf"];

    NSData *data = [[NSData alloc] initWithContentsOfFile:fontPath];
    CGDataProviderRef fontProvider = CGDataProviderCreateWithCFData((CFDataRef)data);
    [data release];

/// blah alah blah 

}

Вот сообщения отладчика в setDetailItem

NSLog(@"fontString: %@, assigned: %@ in controller: %@", fontString, [detailItem description], self);

2011-10-02 23:12:57.036 Medad[558:10d03] fontString: (null), assigned: font1 in controller: < myAppViewController: 0x7078a30>
2011-10-02 23:12:58.015 Medad[558:10d03] fontString: (null), assigned: font2 in controller: < myAppViewController: 0x7078a30>
2011-10-02 23:12:58.475 Medad[558:10d03] fontString: (null), assigned: font3 in controller: < myAppViewController: 0x7078a30>
2011-10-02 23:13:00.365 Medad[558:10d03] fontString: (null), assigned: font4 in controller: < myAppViewController: 0x7078a30>

Моя проблема в этой строке: fontString это должно быть изменено при выборе ячейки ...

NSString *fontPath = [[NSBundle mainBundle] pathForResource:???fontString????? ofType:@"ttf"];

Буду благодарен, если кто-нибудь поможет мне, спасибо

1 Ответ

1 голос
/ 01 октября 2011

Установите точки останова в различных местах в вашем коде, особенно в методах tableView:didSelectRowAtIndexPath: и setDetailItem:, чтобы проверить, вызваны ли они.

  • Если это не так, вы, вероятно, забыли установить delegate вашего UITableView (возможно, вы установили viewController как dataSource табличного представления, но забыли delegate?).

  • Если это так, проверьте в отладчике (или используйте NSLog) значения различных объектов, чтобы проверить, существуют ли nil объекты (отправка сообщения на nil не имеет никакого эффекта)

Могу поспорить, что вы забыли связать выход delegate вашего UITableView с нужным объектом (обычно с вашим ViewController). Если это не причина, нам, безусловно, нужна дополнительная информация, и вам нужно пошагово отлаживать код с помощью точек останова и отладчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...