小编Ric*_*evy的帖子

如何将UIScrollView滚动到UITextView的光标位置?

我有一个类似于笔记应用程序的视图 - 即在一张带衬里的纸上打字.为了使文本和纸张同时滚动,我已经禁用了UITextView的滚动,而是将我的UITextView和我的UIImageView放在UIScrollView中.

唯一的问题是,当用户键入时,文本消失在键盘下方,因为显然UIScrollView不知道滚动到光标位置.

有没有简单的方法可以检索光标位置并告诉UIScrollView在那里滚动?

- -编辑 - -

这里类似的东西开始(有人试图用UITableView做类似的事情),我已经设法制作了一个不断增长的,可编辑的UITextView,它具有几乎完全滚动的固定背景.现在唯一的问题是:

  1. 如果用户输入速度特别快,文本会向上移动,这会有轻微的颤抖.
  2. 如果用户隐藏键盘,选择屏幕底部的文本,然后再次显示键盘,他们必须在文本再次可见之前键入几个字母 - 它不会立即向上滚动.
  3. 当用户隐藏键盘时,动画作为滚动视图的框架填满屏幕感觉不太合适.

这是代码 - 如果有人能进一步完善它,我将非常感激...

#import "NoteEditViewController.h"
#import "RLWideLabelTableCell.h"

@implementation NoteEditViewController
@synthesize keyboardSize;
@synthesize keyboardHideDuration;
@synthesize scrollView;
@synthesize noteTextView;

//
// Dealloc and all that stuff
//
- (void)loadView
{
    [super loadView];
    UIScrollView *aScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
    self.scrollView = aScrollView; [aScrollView release];
    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, noteTextView.frame.size.height);
    [self.view addSubview:scrollView];
}

- (void)viewDidLoad
{   
    [super viewDidLoad];

    // Get notified when keyboard is shown. Don't …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch uiscrollview uitextview

8
推荐指数
1
解决办法
1万
查看次数

如何在编辑时更改自定义UITableViewCell上的缩进量?

我已经制作了一个自定义的UITableViewCell,并且正确地完成了它(将所有内容添加到contentView,并覆盖layoutSubviews所以我的子视图是相对的contentView.bounds).

当用户按下"编辑"按钮时,表格会缩进以留出红色删除符号的空间.这很好,但默认的缩进量太多,并且破坏了我的自定义单元格的外观.如何减少压痕量?setIndentationLevel并且tableView:IndentationLevelForRowAtIndexPath似乎什么也没做.

(有人在这里问过类似的问题,但从未解决过).

iphone cocoa-touch uitableview

6
推荐指数
1
解决办法
5442
查看次数

有没有办法找到UINavigationBar标题的字体和框架大小?

有没有办法以编程方式返回导航控制器标题栏的字体和大小(例如,self.title.frame.size或者self.title.font,虽然我不知道这些作品)?

(如果您想知道原因,我想使用NSString sizeWithFont方法在我截断之前确定标题中可以容纳多少文本.我可以通过物理测量字体和帧大小来实现这一点(例如我认为这是Helvetica 15),但我希望实际的标题报告自己的字体和大小,以使我的应用程序面向未来.)

iphone cocoa-touch uinavigationcontroller ios

6
推荐指数
1
解决办法
3054
查看次数

为什么我的根视图的高度不考虑其导航栏?

我的印象是UINavigationController的导航栏总是按下子视图的高度,这样子视图的原点就在标题栏的底部.

但是当我提出像这样的视图控制器时......

MyViewController *viewController = [[MyViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
viewController.title = @"My View Controller";
viewController.navigationItem.prompt = @"My Prompt";
viewController.delegate = self;

[self presentModalViewController:navigationController animated:YES];
[navigationController release]; [viewController release];
Run Code Online (Sandbox Code Playgroud)

...然后检查self.view.frame.size.heightNSLog viewDidLoad,它报告我的视图是460px高.它不应该减去我的标题和提示的高度?

iphone cocoa-touch uiview uinavigationcontroller

5
推荐指数
1
解决办法
3679
查看次数

什么是"双"在ceil(双)?

我有一个数字(比方说,34),我想找到它的下一个十的倍数.我可以这样做:

  1. 将数字除以10
  2. 将其四舍五入到一个整数
  3. 乘以10.

经过一番研究后,我发现这是Objective C中的代码:

int number = 34;
int roundedNumber = ceil((double)number/10)*10;
Run Code Online (Sandbox Code Playgroud)

我的问题是:什么是(double)for,为什么删除(double)导致它向下舍入而不是向上?

我从谷歌搜索中了解到,将浮动格式更改为"双精度",但说实话,这对我来说太复杂了.任何人都可以简单解释它在做什么吗?

math floating-point cocoa-touch objective-c double-precision

4
推荐指数
1
解决办法
1169
查看次数

如何让未知的UITextField辞职第一响应者?

我的观点有两个UITextFields和一个UISwitch.如果用户编辑a textField,然后立即触摸开关(不按返回),则文本在键入时保留,而不是AutoCorrect.

如果我知道textField他们输入了哪些内容,我可以通过调用强制完成自动更正[textField resignFirstResponder].但是用户可能正在键入textField,所以我不知道要拨打哪一个.

我怎么能绕过这个?有没有办法检测哪些textField被使用?还是我没想过的更简单的东西?

iphone cocoa-touch uitextfield uiswitch

3
推荐指数
2
解决办法
2613
查看次数

为什么NSString sizeWithFont:返回错误的大小?

我需要将UITextView的高度从上到下计算到光标.我正在修剪它包含的文本(因此它只能到达光标),然后使用NSString的sizeWithFont:constrainedToSize:lineBreakMode:方法来计算高度,如下所示:

   NSRange range;
   range.location = noteTextView.selectedRange.location;
   range.length = noteTextView.text.length - range.location;

   NSString *string = [noteTextView.text stringByReplacingCharactersInRange:range withString:@""];

   CGSize size = [string sizeWithFont:noteTextView.font 
                     constrainedToSize:noteTextView.frame.size 
                         lineBreakMode:UILineBreakModeWordWrap];

   NSLog(@"height is: %f \n", size.height);
Run Code Online (Sandbox Code Playgroud)

每当我输入任何东西时都会这样做.

问题是,当我在键入时观察NSLog时,在我在新行上键入4个字符之前,它不会记录高度的变化.就好像该sizeWithFont方法恰好是四个字符.这里有两个屏幕截图显示我的意思: 在线有三个字符的高度 在线高度有四个字符

谁能告诉我发生了什么事?

iphone cocoa-touch nsstring uitextview

3
推荐指数
1
解决办法
4133
查看次数

如何阻止我的自定义UITableViewCell backgroundImage被拉伸?

如果我在我的UITableViewCell子类的init方法中为我的表格单元格创建一个背景图像,那么图像就是我绘制它的方式,并且tableView:heightForRowAtIndexPath:只是在它周围增加了一个间隙.

但是,如果我在tableView的tableView:cellForRowAtIndexPath:方法中创建背景图像并进行设置,则更改单元格高度现在将拉伸图像.

我需要在cellForRowAtIndexPath方法中创建背景视图,因为不同行的背景会发生变化.如何才能使图像的大小再次固定?

iphone cocoa-touch uitableview uiimageview

2
推荐指数
1
解决办法
1113
查看次数

从最近的应用程序栏中删除后,为什么我的程序在重新启动时崩溃?

我是一个编程新手,如果这表明我的无知,那就很抱歉......

情况1:

  • 我的程序在模拟器中运行.我按下主页按钮,然后再按我的程序图标,它会回到原来的位置.这很明显 - 它被iPhone的多任务处理系统冻结了.

情况2:

  • 我的程序在模拟器中运行.我按下主页按钮,但这次我双击该程序并从recent-apps栏中删除它.然后我按下程序的图标再次启动它.

在情境2中,我希望我的程序只是从头开始加载,而是在崩溃之前返回到它被"冻结"的页面.

为什么是这样?

编辑 - 这是崩溃的回溯.我已经完成了我的应用程序的完全干净安装,没有数据,从你看到的第一个屏幕,以保持变量最小化:

#0  0x96dc009a in mach_msg_trap ()
#1  0x96dc0807 in mach_msg ()
#2  0x0111cd86 in __CFRunLoopServiceMachPort ()
#3  0x01079e74 in __CFRunLoopRun ()
#4  0x01079840 in CFRunLoopRunSpecific ()
#5  0x01079761 in CFRunLoopRunInMode ()
#6  0x01c821c4 in GSEventRunModal ()
#7  0x01c82289 in GSEventRun ()
#8  0x001c4c93 in UIApplicationMain ()
#9  0x00002429 in main (argc=1, argv=0xbffff050) at main.m:14
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c multitasking

2
推荐指数
1
解决办法
1415
查看次数

我必须在每条线上投射吗?

我一直在通过在Objective C中创建一个简单的应用程序来自学编程.今天,我遇到了一个问题,我必须编写一个方法,不知道它将获得什么类型的对象.在谷歌的帮助下,我很高兴发现了一种叫做"铸造"的东西.:)

我正在使用铸造:

- (void)aCustomViewControllerNeedsToChangeStuff:(id)viewController
{
    ((SpecialViewController *)viewController).aProperty = somethingInteresting;
    ((SpecialViewController *)viewController).anotherProperty = somethingElse;
    ((SpecialViewController *)viewController).yetAnotherProperty = moreStuff;
}
Run Code Online (Sandbox Code Playgroud)

我是否必须在这样的每一行上进行转换,或者是否有一种方法可以在方法范围内转换"viewController"一次,以使我的代码更整洁?

cocoa cocoa-touch objective-c

1
推荐指数
1
解决办法
89
查看次数

为什么发布我的CoreData上下文/实体会导致我的应用崩溃?

我有一个简单的CoreData应用程序,它允许您将项目添加到列表中,显示在表格视图中.当用户键入新项时,将调用以下方法:

- (void)addNewItem:(NSString *)item
{
    // Create a new instance of the entity managed by the fetched results controller.
    NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
    NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
    Item *newItem = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];

    [newItem setName:item];

    // Save the context.
    NSError *error = nil;
    if (![context save:&error])
    {
        //error handling code
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    [context release];
    [entity release];
    [newItem release];
Run Code Online (Sandbox Code Playgroud)

该应用程序始终允许您将一个项目添加到列表中,但如果您尝试添加一个项目,则会崩溃.如果我删除"[newItem release];",该应用程序将允许您添加4个列表项,然后当您尝试输入第五个时突然崩溃.

只有删除方法末尾的所有三个发布语句时,应用程序才能正常工作.有谁能解释为什么?

iphone cocoa-touch memory-management core-data objective-c

0
推荐指数
1
解决办法
220
查看次数