Текст появляется после нажатия клавиши возврата в UITextField - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть собственный класс для создания текстового представления с такими строками, как приложение Notes от Apple.

Вот как выглядит класс:

NoteView.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface NoteView : UITextView <UITextViewDelegate> {
}


@end

NoteView.m

#import "NoteView.h"

@implementation NoteView

- (id)initWithFrame:(CGRect)frame {

    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor colorWithRed:1.0f green:1.0f blue:0.6f alpha:1.0f];
        self.font = [UIFont fontWithName:@"Marker Felt" size:20];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {

    //Get the current drawing context   
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    //Set the line color and width
    CGContextSetStrokeColorWithColor(context, [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.2f].CGColor);
    CGContextSetLineWidth(context, 1.0f);
    //Start a new Path
    CGContextBeginPath(context);

    //Find the number of lines in our textView + add a bit more height to draw lines in the empty part of the view
    NSUInteger numberOfLines = (self.contentSize.height + self.bounds.size.height) / self.font.leading;

    //Set the line offset from the baseline.
    CGFloat baselineOffset = 6.0f;

    //Iterate over numberOfLines and draw each line
    for (int x = 0; x < numberOfLines; x++) {
        //0.5f offset lines up line with pixel boundary
        CGContextMoveToPoint(context, self.bounds.origin.x, self.font.leading*x + 0.5f + baselineOffset);
        CGContextAddLineToPoint(context, self.bounds.size.width, self.font.leading*x + 0.5f + baselineOffset);
    }

    //Close our Path and Stroke (draw) it
    CGContextClosePath(context);
    CGContextStrokePath(context);
}

@end

Я добавляю вид как подпредставление. Все работает нормально, но текст появляется только после того, как я нажму клавишу возврата. Я вижу мигающий курсор, когда я печатаю, я вижу, что курсор движется, но текст исчез ... После нажатия клавиши возврата текст становится видимым, и после этого все работает нормально. Даже когда я выделю весь текст, удалите его и начните набирать текст.

Вот так выглядит текстовая область:

enter image description here

Как это решить?

Заранее спасибо!

UPDATE:

Вот как я распределяю представление:

annotateText = [[NoteView alloc] initWithFrame:CGRectMake(85.0, 168.0, 600.0, 567.0)];
    annotateText.backgroundColor = [UIColor clearColor];
    [annotateText setText:[annotationNotes objectAtIndex:0]];

    [paperAnnotationView addSubview:annotateText];

1 Ответ

0 голосов
/ 18 октября 2012

Я знаю, что этот вопрос довольно старый. Я столкнулся с той же проблемой и искал решение. Поэтому я решил опубликовать ответ здесь, на всякий случай, если кто-нибудь придет и найдет его. Потянув мои волосы в течение нескольких часов, я понял, что текстовое представление не будет отображать текст в самой первой строке (если мы не нажимаем ввод / возврат или прокручиваем текст), когда границы текстового представления выходят за пределы экрана. Даже когда родительский вид выключен, я столкнулся с той же проблемой.

Вот код, над которым я работал.

    self.captionView = [[[UIImageView alloc] initWithFrame:CGRectMake(231, 769, 563, 643)] autorelease];  //63
    self.captionView.image = [UIImage imageNamed:@"ekp006_preview_fbsharecontainer"];
    self.captionView.userInteractionEnabled = YES;
    //self.captionView.layer.contents = (id)[UIImage imageNamed:@"ekp006_preview_fbsharecontainer"].CGImage;

    UIButton *cancelButton = [[[UIButton alloc] initWithFrame:CGRectMake(10, 10, 73, 34)] autorelease];
    [cancelButton setImage:[UIImage imageNamed:@"ekp006_preview_fbshare_btn_cancel"] forState:UIControlStateNormal];
    [cancelButton setImage:[UIImage imageNamed:@"ekp006_preview_fbshare_btn_cancel_down"] forState:UIControlStateHighlighted];
    [cancelButton addTarget:self action:@selector(cancelFacebookShare) forControlEvents:UIControlEventTouchUpInside];
    [self.captionView addSubview:cancelButton];

    UIButton *shareButton = [[[UIButton alloc] initWithFrame:CGRectMake(480, 10, 73, 34)] autorelease];
    [shareButton setImage:[UIImage imageNamed:@"ekp006_preview_fbshare_btn_share"] forState:UIControlStateNormal];
    [shareButton setImage:[UIImage imageNamed:@"ekp006_preview_fbshare_btn_share_down"] forState:UIControlStateHighlighted];
    [shareButton addTarget:self action:@selector(facebookshare) forControlEvents:UIControlEventTouchUpInside];
    [self.captionView addSubview:shareButton];

    self.captionTextView = [[[UITextView alloc] initWithFrame:CGRectMake(20, 60, 523, 100)] autorelease];
    self.captionTextView.textColor = [UIColor lightGrayColor];
    self.captionTextView.delegate = self;
    self.captionTextView.layer.shadowRadius = 5.0;
    self.captionTextView.layer.shadowColor = [UIColor blackColor].CGColor;
    self.captionTextView.layer.shadowOpacity = 0.8;
    self.captionTextView.layer.borderColor = [UIColor blackColor].CGColor;
    self.captionTextView.layer.borderWidth = 0.75;
    self.captionTextView.layer.cornerRadius = 5.0f;
    self.captionTextView.font = [UIFont fontWithName:@"VAGRoundedBlackSSi" size:18];
    [self.captionView addSubview:self.captionTextView];

    [[self topMostViewController].view addSubview:self.captionView];

Если вы внимательно посмотрите, родительское представление для меня (представление заголовка) было 769 по происхождению y, и я сделал это явным, чтобы я мог сделать вид скользящим снизу вверх, используя анимацию UIView. Чтобы решить эту проблему, я должен был выбрать альтернативный путь создания родительского фрейма как CGRectMake (231, 63, 563, 643) и скрыть весь вид. И чтобы представить это, я использовал что-то вроде этого.

- (void) presentCaptionCaptureScreen
{
    // The code which works
    [AnimationEffects bounceAnimationForView:self.captionView afterTimeInterval:0];
    self.captionTextView.textColor = [UIColor lightGrayColor];
    self.captionTextView.text = @"Enter your caption for the photo";

    // The code which didn't work
/*
    [UIView animateWithDuration:0.7 animations:^
    {
        self.captionTextView.text = @"";
        self.captionView.frame = CGRectMake(231, 63, 563, 643);
    } completion:^(BOOL finished)
    {
        self.captionTextView.textColor = [UIColor lightGrayColor];
        self.captionTextView.text = @"Enter your caption for the photo";
    }];
     */
}

Это сработало для меня!

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