小编Eri*_*k B的帖子

如何检查两个格式字符串是否兼容?

例子:

"Something %d"        and "Something else %d"       // Compatible
"Something %d"        and "Something else %f"       // Not Compatible
"Something %d"        and "Something %d else %d"    // Not Compatible
"Something %d and %f" and "Something %2$f and %1$d" // Compatible
Run Code Online (Sandbox Code Playgroud)

我认为应该有一些C功能,但我没有得到任何相关的搜索结果.我的意思是编译器正在检查格式字符串和参数是否匹配,因此已经编写了用于检查它的代码.唯一的问题是我怎么称呼它.

我正在使用Objective-C,所以如果有一个Objective-C特定的解决方案也没关系.

c compatibility printf objective-c format-string

39
推荐指数
2
解决办法
872
查看次数

如何从UIScrollView窃取触摸?

今天,在我的创作时间,我做了一些非常全面的研究,如何从UIScrollView窃取触摸并立即将它们发送到特定的子视图,同时保持其余滚动视图的默认行为.考虑在UITableView中使用UIPickerView.默认行为是,如果您将手指拖到选择器视图上,滚动视图将滚动,选择器视图将保持不变.

我尝试的第一件事是覆盖

- (BOOL)touchesShouldCancelInContentView:(UIView *)view
Run Code Online (Sandbox Code Playgroud)

并且根本不允许UIScrollView取消选择器视图内的触摸.这有效,但它有一个令人不快的副作用.您希望选择器视图立即响应,因此您必须设置delaysContentTouches为NO.问题是您不希望表视图的其余部分立即响应,因为如果确实如此,表视图单元将始终在滚动开始之前突出显示几毫秒.

我尝试的第二件事是覆盖

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)

因为我已经读过滚动视图总是返回自己,所以它会"窃取"其子视图中的触摸,然后如果它们对滚动视图不感兴趣则将它们发送到子视图.但是,这不再适用.UIScrollView的hitTest的默认实现:withEvent:实际上返回应该接收触摸的子视图.相反,它使用手势识别器来拦截触摸.

所以我尝试的第三件事就是实现我自己的手势识别器,如果触摸在选择器视图之外,则会导致失败,否则会成功.然后我将所有滚动视图的手势识别器设置为失败,除非我的手势识别器使用以下代码失败:

for (UIGestureRecognizer * gestureRecognizer in self.tableView.gestureRecognizers)
{
    [gestureRecognizer requireGestureRecognizerToFail:myRecognizer];
}
Run Code Online (Sandbox Code Playgroud)

事实上这实际上是从滚动视图中窃取了触摸,但是拾取器视图从未接收到它们.所以我可能只是发送我的手势识别器使用此代码接收的所有触摸:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    for (UITouch *touch in touches)
        [touch.view touchesBegan:touches withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)

以上代码是简化版.我还确保视图是一个选择器视图(或其中一个子视图),并为上面提到的手势识别器设置适当的状态.我也做了同样的取消,结束和感动.但是,选择器视图仍然没有响应.

在回到我的日常工作之前,我还尝试了最后一件事.在我广泛的谷歌搜索过程中,我读到嵌套的UIScrollViews从3.x开始就神奇地工作了,所以我尝试将我的选择器视图放在嵌套的UIScrollView中并在其上设置以下属性:

scrollView.delaysContentTouches = NO;
scrollView.canCancelContentTouches = NO;
Run Code Online (Sandbox Code Playgroud)

正如人们所期望的那样,外部滚动视图不会处理内部滚动视图与处理选择器视图时的任何不同,因此内部滚动视图没有接收到触摸.我认为这是一个很长的镜头,但它很容易实现,所以我认为值得一试.

我所知道的是UIScrollView有一个名为UIScrollViewDelayedTouchesBeganGestureRecognizer截取触摸的手势识别器,并在150(?)ms之后将它们发送到适当的子视图.我想我应该能够写一个类似的识别器,导致滚动视图的默认识别器失败,而不是延迟触摸立即将它们发送到选择器视图.因此,如果有人知道如何编写这样的识别器,请告诉我,如果您有任何其他问题的解决方案,那么您也非常欢迎.

感谢您阅读整个问题,即使您不知道答案,您仍然可以提出问题,以便得到更多关注(希望能得到答案的人).谢谢!:)

iphone nested uiscrollview uipickerview ios4

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

31
推荐指数
6
解决办法
7228
查看次数

是否有一个PHP函数只添加斜杠到双引号而不是单引号

我用PHP生成JSON.

我一直在用

$string = 'This string has "double quotes"';

echo addslashes($string);
Run Code Online (Sandbox Code Playgroud)

输出: This string has \" double quotes\"

完全有效的JSON

不幸的是,对于有效的JSON,addslashes也会逃避单引号,带来灾难性后果

$string = "This string has 'single quotes'";

echo addslashes($string);
Run Code Online (Sandbox Code Playgroud)

输出: This string has \'single quotes\'

简而言之,有没有办法只能逃避双引号?

php json

31
推荐指数
3
解决办法
3万
查看次数

相反带来了SubviewToFront?

除了希望视图位于所有内容之外,您可能希望视图位于所有内容之下,但是没有bringSubviewToBack:.为什么不,如何将子视图带回来?

iphone subview uiview

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

UIColor clearColor

文档说明了clearColor的灰度和alpha = 0.这究竟意味着什么?它只是一种颜色,无论背景是什么?

iphone objective-c uicolor

21
推荐指数
3
解决办法
3万
查看次数

乳胶表太宽了.如何使它适合?

我刚刚开始学习乳胶,现在我正在尝试创建一个表.这是我的代码:

\begin{table}
\caption{Top Scorers}
\begin{tabular}{ l l }
    \hline
    \bf Goals & \bf Players\\
    \hline
    4 & First Last, First Last, First Last, First Last\\
    3 & First Last\\
    2 & First Last\\
    1 & First Last, First Last, First Last, First Last, First Last, First Last, First Last, First Last, First Last, First Last, First Last, First Last, First Last\\
    \hline
\end{tabular}
\end{table}
Run Code Online (Sandbox Code Playgroud)

问题是表格比页面宽.我希望它会像普通文本一样自动适应页面,但事实并非如此.如何告诉乳胶使表适合页面?

latex tabular

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

是否有命令在mercurial中设置默认路径?

hg clone 设置默认路径,以便您可以在不指定URL的情况下进行拉取和推送.

hg clone ssh://hg@bitbucket.org/account/repository
Run Code Online (Sandbox Code Playgroud)

但是,如果您有一个现有的本地存储库并决定在bitbucket上共享它,那么您将无法获得默认路径设置.

hg push ssh://hg@bitbucket.org/account/repository
Run Code Online (Sandbox Code Playgroud)

是否有设置默认路径的命令或我被迫手动编辑.hg/hgrc?

mercurial default path

17
推荐指数
3
解决办法
9035
查看次数

与SQLite中的HEX()相反?

我有这个简单的查询,返回一堆guid作为十六进制字符串:

SELECT HEX(guid) FROM table;
Run Code Online (Sandbox Code Playgroud)

其中一个是例如43F4124307108902B7A919F4D4D0770D.然后想象我想用这个guid获取记录,所以我写了一个这样的查询:

SELECT * FROM table WHERE guid = '43F4124307108902B7A919F4D4D0770D';
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,因为字符串直接被解释为blob而不是转换为它的十六进制值.我看了这里,但找不到任何看起来像是一个十六进制字符串并将其转换为blob的方法.

sqlite hex

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

"现在停止发出太多错误" - 如何增加或删除限制?

所以我正在做一些重构,我真的很烦恼,我没有预先得到所有的错误.如何增加限制或删除限制,以便编译器输出它可以找到的所有错误?

xcode compiler-errors llvm

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